역할 관리 페이지 개선
- 역할 목록: 테넌트/Guard 컬럼 추가, Guard 필터 드롭다운 추가 - 역할 등록/수정: Guard 선택 기능 추가 (API/Web) - 권한 선택 UI를 메뉴 기반 매트릭스로 변경 (7가지 권한 유형) - 테넌트 미선택 시 역할 등록 차단 - pagination.js 디버그 로그 제거
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Services\RolePermissionService;
|
||||
use App\Services\RoleService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\View;
|
||||
@@ -9,7 +10,8 @@
|
||||
class RoleController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private readonly RoleService $roleService
|
||||
private readonly RoleService $roleService,
|
||||
private readonly RolePermissionService $rolePermissionService
|
||||
) {}
|
||||
|
||||
/**
|
||||
@@ -27,18 +29,22 @@ public function create(): View
|
||||
{
|
||||
$tenantId = session('selected_tenant_id');
|
||||
|
||||
// 권한 목록 조회 (현재 테넌트 또는 전체)
|
||||
$query = \Spatie\Permission\Models\Permission::query()
|
||||
->where('guard_name', 'web')
|
||||
->orderBy('name');
|
||||
|
||||
if ($tenantId) {
|
||||
$query->where('tenant_id', $tenantId);
|
||||
// 테넌트 미선택 시 생성 불가
|
||||
if (! $tenantId || $tenantId === 'all') {
|
||||
return view('roles.create', [
|
||||
'requireTenant' => true,
|
||||
'menus' => collect(),
|
||||
'permissionTypes' => [],
|
||||
]);
|
||||
}
|
||||
|
||||
$permissions = $query->get(['id', 'name']);
|
||||
// 메뉴 트리 조회 (권한 매트릭스용)
|
||||
$menus = $this->rolePermissionService->getMenuTree($tenantId);
|
||||
|
||||
return view('roles.create', compact('permissions'));
|
||||
// 권한 유형 목록
|
||||
$permissionTypes = ['view', 'create', 'update', 'delete', 'approve', 'export', 'manage'];
|
||||
|
||||
return view('roles.create', compact('menus', 'permissionTypes'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -53,21 +59,21 @@ public function edit(int $id): View
|
||||
}
|
||||
|
||||
$tenantId = session('selected_tenant_id');
|
||||
$effectiveTenantId = ($tenantId && $tenantId !== 'all') ? $tenantId : null;
|
||||
|
||||
// 권한 목록 조회 (현재 테넌트 또는 전체)
|
||||
$query = \Spatie\Permission\Models\Permission::query()
|
||||
->where('guard_name', 'web')
|
||||
->orderBy('name');
|
||||
// 메뉴 트리 조회 (권한 매트릭스용)
|
||||
$menus = $this->rolePermissionService->getMenuTree($effectiveTenantId);
|
||||
|
||||
if ($tenantId) {
|
||||
$query->where('tenant_id', $tenantId);
|
||||
}
|
||||
// 권한 유형 목록
|
||||
$permissionTypes = ['view', 'create', 'update', 'delete', 'approve', 'export', 'manage'];
|
||||
|
||||
$permissions = $query->get(['id', 'name']);
|
||||
// 현재 역할의 권한 매트릭스 조회
|
||||
$permissions = $this->rolePermissionService->getRolePermissionMatrix(
|
||||
$role->id,
|
||||
$effectiveTenantId,
|
||||
$role->guard_name
|
||||
);
|
||||
|
||||
// 현재 역할이 가진 권한 ID 목록
|
||||
$rolePermissionIds = $role->permissions->pluck('id')->toArray();
|
||||
|
||||
return view('roles.edit', compact('role', 'permissions', 'rolePermissionIds'));
|
||||
return view('roles.edit', compact('role', 'menus', 'permissionTypes', 'permissions'));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user