diff --git a/app/common/logic/PermLogic.php b/app/common/logic/PermLogic.php index b4fe819..d14ddd3 100644 --- a/app/common/logic/PermLogic.php +++ b/app/common/logic/PermLogic.php @@ -9,18 +9,50 @@ class PermLogic /** * 获取用户所有资源(合并角色+直接分配) */ + // public function getUserResources(int $userId) + // { + // $user = User::with(['roles.resources', 'resources'])->find($userId); + // if (!$user) { + // return collect(); + // } + + // $all = collect(); + // foreach ($user->roles as $role) { + // $all = $all->merge($role->resources); + // } + // $all = $all->merge($user->resources); + // return $all->unique('id')->values(); + // } public function getUserResources(int $userId) { + // 获取用户及其关联角色资源和直接分配的资源 $user = User::with(['roles.resources', 'resources'])->find($userId); + if (!$user) { return collect(); } $all = collect(); + + // 合并角色资源,排除不需要权限认证的资源 foreach ($user->roles as $role) { - $all = $all->merge($role->resources); + $all = $all->merge( + $role->resources->filter(function ($resource) { + // 只保留需要权限认证的资源 + return !$resource->no_auth; + }) + ); } - $all = $all->merge($user->resources); + + // 合并用户直接分配的资源,排除不需要权限认证的资源 + $all = $all->merge( + $user->resources->filter(function ($resource) { + // 只保留需要权限认证的资源 + return !$resource->no_auth; + }) + ); + + // 返回唯一的资源列表,并按 id 排序 return $all->unique('id')->values(); }