diff --git a/app/admin/controller/v1/User.php b/app/admin/controller/v1/User.php index 57f51ce7..bae5b4c0 100644 --- a/app/admin/controller/v1/User.php +++ b/app/admin/controller/v1/User.php @@ -3,6 +3,8 @@ declare (strict_types = 1); namespace app\admin\controller\v1; +use app\admin\model\v1\SysMenuModel; +use app\admin\model\v1\SysRoleAuthorityModel; use app\admin\model\v1\SysUserLoginLogModel; use app\admin\model\v1\SysUserModel; use app\admin\validate\v1\SysUserValidate; @@ -12,6 +14,65 @@ use app\admin\validate\v1\SysUserValidate; */ class User { + // 获取用户菜单权限 + public function menu() + { + $id = request()->param('id'); + $user = SysUserModel::bypk($id)->find(); + if (empty($user)) { + return error('用户不存在'); + } + + $menus = SysMenuModel::alias('menu')->field([ + 'menu.id', + 'menu.pid', + 'menu.title', + 'menu.name', + 'menu.path', + 'menu.icon', + 'menu.redirect', + 'menu.component', + 'menu.hidden', + 'menu.actived', + 'menu.keep_alive' + ]) + ->where('menu.status', '=', 1) + ->whereExists(function($query) use($user) { + $query->table((new SysRoleAuthorityModel)->getTable())->alias('authority') + ->where('authority.role_id', '=', $user->role_id) + ->where('authority.menu_id = menu.id') + ->group('authority.menu_id'); + }) + ->select(); + if (!$menus->isEmpty()) { + $authoritys = SysRoleAuthorityModel::field([ + 'menu_id', + 'permission' + ]) + ->roleId($user->role_id) + ->whereNotNull('permission') + ->select(); + $authoritys_map = []; + foreach ($authoritys as $val) { + $authoritys_map[$val['menu_id']][] = $val['permission']; + } + if (!empty($authoritys_map)) { + $menus->each(function($item) use($authoritys_map) { + $item['hidden'] = !!$item['hidden']; + $item['actived'] = !!$item['actived']; + $item['keep_alive'] = !!$item['keep_alive']; + $item['permissions'] = []; + if (isset($authoritys_map[$item['id']])) { + $item['permissions'] = $authoritys_map[$item['id']]; + } + return $item; + }); + } + } + + return success('获取成功', array_to_tree($menus->toArray(), 0)); + } + // 用户分页数据 public function index() { diff --git a/app/admin/route/v1.php b/app/admin/route/v1.php index cf6b97eb..bec92e0f 100644 --- a/app/admin/route/v1.php +++ b/app/admin/route/v1.php @@ -24,6 +24,9 @@ Route::group('v1', function () { // 登录接口 Route::post('login', 'Login/index'); + + // 获取用户菜单权限 + Route::get('{id}/menu', 'User/menu'); }); // 语言模块