Files

139 lines
3.8 KiB
PHP

<?php
/*
* @Author: YwxApp <ywx@ywxapp.cn>
* @Date: 2026-04-29 02:32:33
* @LastEditors: YwxApp <ywx@ywxapp.cn>
* @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');
}
}