diff --git a/app/Services/PermissionAnalyzeService.php b/app/Services/PermissionAnalyzeService.php
index d361db9d..150d5229 100644
--- a/app/Services/PermissionAnalyzeService.php
+++ b/app/Services/PermissionAnalyzeService.php
@@ -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) {
diff --git a/config/app.php b/config/app.php
index 423eed59..a8a8f51b 100644
--- a/config/app.php
+++ b/config/app.php
@@ -65,7 +65,7 @@
|
*/
- 'timezone' => 'UTC',
+ 'timezone' => env('APP_TIMEZONE', 'Asia/Seoul'),
/*
|--------------------------------------------------------------------------
diff --git a/resources/views/archived-records/partials/table.blade.php b/resources/views/archived-records/partials/table.blade.php
index a03cf554..5e42e255 100644
--- a/resources/views/archived-records/partials/table.blade.php
+++ b/resources/views/archived-records/partials/table.blade.php
@@ -2,15 +2,15 @@
- | ID |
- 작업 설명 |
- 대상 테넌트 |
- 대상 정보 |
- 레코드 타입 |
- 레코드 수 |
- 삭제자 |
- 삭제일시 |
- 작업 |
+ ID |
+ 작업 설명 |
+ 대상 테넌트 |
+ 대상 정보 |
+ 레코드 타입 |
+ 레코드 수 |
+ 삭제자 |
+ 삭제일시 |
+ 작업 |
diff --git a/resources/views/boards/partials/table.blade.php b/resources/views/boards/partials/table.blade.php
index 3e809f44..2c2e4a71 100644
--- a/resources/views/boards/partials/table.blade.php
+++ b/resources/views/boards/partials/table.blade.php
@@ -2,14 +2,14 @@
- | ID |
- 코드 |
- 게시판명 |
- 유형 |
- 필드 수 |
- 상태 |
- 생성일 |
- 액션 |
+ ID |
+ 코드 |
+ 게시판명 |
+ 유형 |
+ 필드 수 |
+ 상태 |
+ 생성일 |
+ 액션 |
diff --git a/resources/views/department-permissions/partials/permission-matrix.blade.php b/resources/views/department-permissions/partials/permission-matrix.blade.php
index 3e277603..357e8206 100644
--- a/resources/views/department-permissions/partials/permission-matrix.blade.php
+++ b/resources/views/department-permissions/partials/permission-matrix.blade.php
@@ -2,17 +2,17 @@
- | 순번 |
- 메뉴명 |
- URL |
- 순서 |
- 조회 |
- 생성 |
- 수정 |
- 삭제 |
- 승인 |
- 내보내기 |
- 관리 |
+ 순번 |
+ 메뉴명 |
+ URL |
+ 순서 |
+ 조회 |
+ 생성 |
+ 수정 |
+ 삭제 |
+ 승인 |
+ 내보내기 |
+ 관리 |
@@ -24,11 +24,11 @@
data-menu-id="{{ $menu->id }}"
data-parent-id="{{ $menu->parent_id ?? '' }}"
data-depth="{{ $menu->depth ?? 0 }}">
-
+ |
{{ $index + 1 }}
|
-
-
+
+
{{-- 트리 구조 표시 --}}
@if(($menu->depth ?? 0) > 0)
└─
@@ -59,20 +59,20 @@ class="toggle-btn flex items-center text-blue-500 hover:text-blue-700 focus:outl
|
-
+ |
{{ $menu->url }}
|
-
+ |
{{ $menu->sort_order }}
|
@foreach($permissionTypes as $type)
-
+ |
id][$type]) && $permissions[$menu->id][$type] ? 'checked' : '' }}
- class="h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary cursor-pointer"
+ class="h-5 w-5 rounded border-gray-300 text-primary focus:ring-primary cursor-pointer"
hx-post="/api/admin/department-permissions/toggle"
hx-trigger="click"
hx-target="#permission-matrix"
diff --git a/resources/views/dev-tools/flow-tester/index.blade.php b/resources/views/dev-tools/flow-tester/index.blade.php
index d15afb0a..4eb24ffd 100644
--- a/resources/views/dev-tools/flow-tester/index.blade.php
+++ b/resources/views/dev-tools/flow-tester/index.blade.php
@@ -78,12 +78,12 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none foc
- | 이름 |
- 카테고리 |
- 스텝 |
- 최근 실행 |
- 상태 |
- 액션 |
+ 이름 |
+ 카테고리 |
+ 스텝 |
+ 최근 실행 |
+ 상태 |
+ 액션 |
@@ -139,7 +139,7 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none foc
| |