Files
sam-manage/app/Http/Controllers/UserController.php
kent 049fa7ed61 feat: [users] 슈퍼관리자 보호 기능 구현
- 일반관리자가 슈퍼관리자 수정/삭제 불가
- API Controller: update/destroy에서 403 반환
- Web Controller: edit에서 403 abort
- FormRequest: is_super_admin 필드 강제/유지 처리
- View: 테이블, 모달, 생성/수정 폼에서 버튼/체크박스 숨김

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 23:10:07 +09:00

68 lines
2.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Department;
use App\Models\Role;
use App\Services\UserService;
use Illuminate\Http\Request;
use Illuminate\View\View;
class UserController extends Controller
{
public function __construct(
private readonly UserService $userService
) {}
/**
* 사용자 목록 페이지
*/
public function index(Request $request): View
{
return view('users.index');
}
/**
* 사용자 생성 페이지
*/
public function create(): View
{
$tenantId = session('selected_tenant_id');
// 역할/부서 목록 (테넌트별)
$roles = $tenantId ? Role::where('tenant_id', $tenantId)->orderBy('name')->get() : collect();
$departments = $tenantId ? Department::where('tenant_id', $tenantId)->where('is_active', true)->orderBy('name')->get() : collect();
return view('users.create', compact('roles', 'departments'));
}
/**
* 사용자 수정 페이지
*/
public function edit(int $id): View
{
$user = $this->userService->getUserById($id);
if (! $user) {
abort(404, '사용자를 찾을 수 없습니다.');
}
// 슈퍼관리자 보호: 일반관리자가 슈퍼관리자를 수정하려는 경우 차단
if ($user->is_super_admin && ! auth()->user()?->is_super_admin) {
abort(403, '슈퍼관리자는 수정할 수 없습니다.');
}
$tenantId = session('selected_tenant_id');
// 역할/부서 목록 (테넌트별)
$roles = $tenantId ? Role::where('tenant_id', $tenantId)->orderBy('name')->get() : collect();
$departments = $tenantId ? Department::where('tenant_id', $tenantId)->where('is_active', true)->orderBy('name')->get() : collect();
// 사용자의 현재 역할/부서 ID 목록
$userRoleIds = $tenantId ? $user->userRoles()->where('tenant_id', $tenantId)->pluck('role_id')->toArray() : [];
$userDepartmentIds = $tenantId ? $user->departmentUsers()->where('tenant_id', $tenantId)->pluck('department_id')->toArray() : [];
return view('users.edit', compact('user', 'roles', 'departments', 'userRoleIds', 'userDepartmentIds'));
}
}