* @Date: 2026-04-29 02:32:33 * @LastEditors: YwxApp * @LastEditTime: 2026-07-21 23:25:55 * @Description: * @FilePath: \ywxapp_dev\app\backend\service\PermissionService.php * @CustomString: Copyright (c) 2026 YwxApp */ declare(strict_types=1); namespace app\backend\service; use ywxapp\model\BackendAdmin as AdminModel; use ywxapp\model\RolePermission; use ywxapp\model\Permission as PermissionModel; /** * 权限服务类 * * // 获取权限列表 * $permissionList = PermissionService::getUserPermissions($userId); * // 或者获取权限树 * $permissionTree = PermissionService::getUserPermissionTree($userId); * // 或者只获取权限编码 * $permissionCodes = PermissionService::getUserPermissionCodes($userId); */ class PermissionService { /** * 获取当前用户的权限列表 * @param int $userId 用户ID * @return array */ public static function getUserPermissions($userId) { // 1. 获取用户角色 $user = AdminModel::with(['roles'])->find($userId); if (!$user) { return []; } $roleIds = array_column($user->roles->toArray(), 'id'); if (empty($roleIds)) { return []; } // 2. 获取角色权限ID $permissionIds = RolePermission::where('role_id', 'in', $roleIds) ->column('permission_id'); if (empty($permissionIds)) { return []; } // 3. 获取权限详情 return PermissionModel::where('id', 'in', $permissionIds) ->select() ->toArray(); } /** * 获取当前用户的权限列表 * @param int $userId 用户ID * @return array */ public static function getUserMenus($userId) { // 1. 获取用户角色 $user = AdminModel::with(['roles'])->find($userId); if (!$user) { return []; } $roleIds = array_column($user->roles->toArray(), 'id'); if (empty($roleIds)) { return []; } // 2. 获取角色权限ID $permissionIds = RolePermission::where('role_id', 'in', $roleIds) ->column('permission_id'); if (empty($permissionIds)) { return []; } // 3. 获取权限详情 $permissions = PermissionModel::where('type',1)->where('id', 'in', $permissionIds) ->select() ->toArray(); return self::buildPermissionTree($permissions); } /** * 获取当前用户的权限树 * @param int $userId 用户ID * @return array */ public static function getUserPermissionTree($userId) { $permissions = self::getUserPermissions($userId); return self::buildPermissionTree($permissions); } /** * 构建权限树 * @param array $permissions 权限列表 * @param int $parentId 父级ID * @return array */ protected static function buildPermissionTree($permissions, $parentId = 0) { $tree = []; foreach ($permissions as $permission) { if ($permission['pid'] == $parentId) { $children = self::buildPermissionTree($permissions, $permission['id']); if ($children) { $permission['children'] = $children; } $tree[] = $permission; } } return $tree; } /** * 获取当前用户的权限编码列表 * @param int $userId 用户ID * @return array */ public static function getUserPermissionCodes($userId) { $permissions = self::getUserPermissions($userId); return array_column($permissions, 'code'); } }