Finish mzl_dev
This commit is contained in:
@@ -3,27 +3,68 @@
|
||||
namespace app\common\logic;
|
||||
|
||||
use app\common\model\User;
|
||||
use app\common\model\Resource;
|
||||
|
||||
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;
|
||||
})
|
||||
);
|
||||
|
||||
// 加入公共菜单,公共菜单不管是否授权,所有人都能访问
|
||||
$publicResources = Resource::where('no_auth', 1)->get(); // 获取所有公共菜单
|
||||
$all = $all->merge($publicResources);
|
||||
|
||||
// 返回唯一的资源列表,并按 id 排序
|
||||
return $all->unique('id')->values();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 构建目录/菜单树,节点包含权限与打开方式,拼接完整路径,并对子级菜单component处理
|
||||
* @param \Illuminate\Support\Collection $resources
|
||||
|
||||
Reference in New Issue
Block a user