style: 관리자 패널 UI 개선 및 스크럼 모달 통합

- 테이블 헤더 스타일 통일 (menus, roles, permissions, boards 등)
- 권한 매트릭스 체크박스/버튼 크기 20x20으로 표준화
- 스크럼 항목 추가/수정 모달 통합 (코드 중복 제거)
- daily-logs API URL 경로 수정 (/pm/ 제거)
- 타임존 Asia/Seoul로 변경
- flow-tester 액션 아이콘 크기 조정
This commit is contained in:
2025-12-03 16:47:57 +09:00
parent 23c53cbb82
commit 2846d6c034
17 changed files with 316 additions and 399 deletions

View File

@@ -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) {