style: 관리자 패널 UI 개선 및 스크럼 모달 통합
- 테이블 헤더 스타일 통일 (menus, roles, permissions, boards 등) - 권한 매트릭스 체크박스/버튼 크기 20x20으로 표준화 - 스크럼 항목 추가/수정 모달 통합 (코드 중복 제거) - daily-logs API URL 경로 수정 (/pm/ 제거) - 타임존 Asia/Seoul로 변경 - flow-tester 액션 아이콘 크기 조정
This commit is contained in:
@@ -286,6 +286,11 @@ private function getUsersByTenant(?int $tenantId): Collection
|
||||
{
|
||||
$query = User::where('is_active', true);
|
||||
|
||||
// 일반 관리자는 슈퍼관리자를 볼 수 없음
|
||||
if (! auth()->user()?->is_super_admin) {
|
||||
$query->where('is_super_admin', false);
|
||||
}
|
||||
|
||||
if ($tenantId) {
|
||||
$query->whereHas('tenants', function ($q) use ($tenantId) {
|
||||
$q->where('tenants.id', $tenantId)
|
||||
@@ -358,9 +363,10 @@ private function getUserRoles(int $userId, ?int $tenantId): array
|
||||
public function traceUsersWithPermission(int $menuId, string $permissionType = 'view', ?int $tenantId = null, string $guardName = 'api'): array
|
||||
{
|
||||
$permissionName = "menu:{$menuId}.{$permissionType}";
|
||||
$excludeSuperAdmin = ! auth()->user()?->is_super_admin;
|
||||
|
||||
// 역할로 권한이 있는 사용자
|
||||
$usersFromRole = DB::table('model_has_roles as mhr')
|
||||
$usersFromRoleQuery = DB::table('model_has_roles as mhr')
|
||||
->join('role_has_permissions as rhp', 'rhp.role_id', '=', 'mhr.role_id')
|
||||
->join('permissions as p', 'p.id', '=', 'rhp.permission_id')
|
||||
->join('users as u', 'u.id', '=', 'mhr.model_id')
|
||||
@@ -369,12 +375,18 @@ public function traceUsersWithPermission(int $menuId, string $permissionType = '
|
||||
->where('mhr.model_type', User::class)
|
||||
->where('p.guard_name', $guardName)
|
||||
->where('p.name', $permissionName)
|
||||
->where('u.is_active', true)
|
||||
->get();
|
||||
->where('u.is_active', true);
|
||||
|
||||
// 일반 관리자는 슈퍼관리자를 볼 수 없음
|
||||
if ($excludeSuperAdmin) {
|
||||
$usersFromRoleQuery->where('u.is_super_admin', false);
|
||||
}
|
||||
|
||||
$usersFromRole = $usersFromRoleQuery->get();
|
||||
|
||||
// 부서로 권한이 있는 사용자
|
||||
$now = now();
|
||||
$usersFromDepartment = DB::table('department_user as du')
|
||||
$usersFromDepartmentQuery = DB::table('department_user as du')
|
||||
->join('permission_overrides as po', function ($j) use ($now) {
|
||||
$j->on('po.model_id', '=', 'du.department_id')
|
||||
->where('po.model_type', Department::class)
|
||||
@@ -396,15 +408,19 @@ public function traceUsersWithPermission(int $menuId, string $permissionType = '
|
||||
->where('p.name', $permissionName)
|
||||
->where('u.is_active', true);
|
||||
|
||||
if ($excludeSuperAdmin) {
|
||||
$usersFromDepartmentQuery->where('u.is_super_admin', false);
|
||||
}
|
||||
|
||||
if ($tenantId) {
|
||||
$usersFromDepartment->where('du.tenant_id', $tenantId)
|
||||
$usersFromDepartmentQuery->where('du.tenant_id', $tenantId)
|
||||
->where('po.tenant_id', $tenantId);
|
||||
}
|
||||
|
||||
$usersFromDepartment = $usersFromDepartment->get();
|
||||
$usersFromDepartment = $usersFromDepartmentQuery->get();
|
||||
|
||||
// 개인 ALLOW 오버라이드가 있는 사용자
|
||||
$usersFromPersonal = DB::table('permission_overrides as po')
|
||||
$usersFromPersonalQuery = DB::table('permission_overrides as po')
|
||||
->join('permissions as p', 'p.id', '=', 'po.permission_id')
|
||||
->join('users as u', 'u.id', '=', 'po.model_id')
|
||||
->select('u.id as user_id', 'u.name as user_name', 'u.email', 'po.effect')
|
||||
@@ -421,14 +437,18 @@ public function traceUsersWithPermission(int $menuId, string $permissionType = '
|
||||
$w->whereNull('po.effective_to')->orWhere('po.effective_to', '>=', $now);
|
||||
});
|
||||
|
||||
if ($tenantId) {
|
||||
$usersFromPersonal->where('po.tenant_id', $tenantId);
|
||||
if ($excludeSuperAdmin) {
|
||||
$usersFromPersonalQuery->where('u.is_super_admin', false);
|
||||
}
|
||||
|
||||
$usersFromPersonal = $usersFromPersonal->get();
|
||||
if ($tenantId) {
|
||||
$usersFromPersonalQuery->where('po.tenant_id', $tenantId);
|
||||
}
|
||||
|
||||
$usersFromPersonal = $usersFromPersonalQuery->get();
|
||||
|
||||
// 개인 DENY 오버라이드가 있는 사용자
|
||||
$usersWithDeny = DB::table('permission_overrides as po')
|
||||
$usersWithDenyQuery = DB::table('permission_overrides as po')
|
||||
->join('permissions as p', 'p.id', '=', 'po.permission_id')
|
||||
->join('users as u', 'u.id', '=', 'po.model_id')
|
||||
->select('u.id as user_id', 'u.name as user_name', 'u.email')
|
||||
@@ -445,11 +465,15 @@ public function traceUsersWithPermission(int $menuId, string $permissionType = '
|
||||
$w->whereNull('po.effective_to')->orWhere('po.effective_to', '>=', $now);
|
||||
});
|
||||
|
||||
if ($tenantId) {
|
||||
$usersWithDeny->where('po.tenant_id', $tenantId);
|
||||
if ($excludeSuperAdmin) {
|
||||
$usersWithDenyQuery->where('u.is_super_admin', false);
|
||||
}
|
||||
|
||||
$usersWithDeny = $usersWithDeny->get();
|
||||
if ($tenantId) {
|
||||
$usersWithDenyQuery->where('po.tenant_id', $tenantId);
|
||||
}
|
||||
|
||||
$usersWithDeny = $usersWithDenyQuery->get();
|
||||
|
||||
return [
|
||||
'by_role' => $usersFromRole->map(function ($item) {
|
||||
|
||||
Reference in New Issue
Block a user