修改获取菜单的方式

This commit is contained in:
mzl
2025-07-14 14:22:57 +08:00
parent 0ee62d507c
commit 373236b92f
+11 -2
View File
@@ -3,6 +3,7 @@
namespace app\common\logic; namespace app\common\logic;
use app\common\model\User; use app\common\model\User;
use app\common\model\Resource;
class PermLogic class PermLogic
{ {
@@ -23,6 +24,9 @@ class PermLogic
// $all = $all->merge($user->resources); // $all = $all->merge($user->resources);
// return $all->unique('id')->values(); // return $all->unique('id')->values();
// } // }
/**
* 获取用户所有资源(合并角色+直接分配),并加入公共菜单
*/
public function getUserResources(int $userId) public function getUserResources(int $userId)
{ {
// 获取用户及其关联角色资源和直接分配的资源 // 获取用户及其关联角色资源和直接分配的资源
@@ -38,7 +42,7 @@ class PermLogic
foreach ($user->roles as $role) { foreach ($user->roles as $role) {
$all = $all->merge( $all = $all->merge(
$role->resources->filter(function ($resource) { $role->resources->filter(function ($resource) {
// 只保留需要权限认证的资源 // 只保留需要权限认证的资源(或公共资源)
return !$resource->no_auth; return !$resource->no_auth;
}) })
); );
@@ -47,15 +51,20 @@ class PermLogic
// 合并用户直接分配的资源,排除不需要权限认证的资源 // 合并用户直接分配的资源,排除不需要权限认证的资源
$all = $all->merge( $all = $all->merge(
$user->resources->filter(function ($resource) { $user->resources->filter(function ($resource) {
// 只保留需要权限认证的资源 // 只保留需要权限认证的资源(或公共资源)
return !$resource->no_auth; return !$resource->no_auth;
}) })
); );
// 加入公共菜单,公共菜单不管是否授权,所有人都能访问
$publicResources = Resource::where('no_auth', 1)->get(); // 获取所有公共菜单
$all = $all->merge($publicResources);
// 返回唯一的资源列表,并按 id 排序 // 返回唯一的资源列表,并按 id 排序
return $all->unique('id')->values(); return $all->unique('id')->values();
} }
/** /**
* 构建目录/菜单树,节点包含权限与打开方式,拼接完整路径,并对子级菜单component处理 * 构建目录/菜单树,节点包含权限与打开方式,拼接完整路径,并对子级菜单component处理
* @param \Illuminate\Support\Collection $resources * @param \Illuminate\Support\Collection $resources