From f9957ff9352623573c76ff8cee17464a4d33f2fb Mon Sep 17 00:00:00 2001 From: walkor Date: Tue, 6 Dec 2022 11:24:47 +0800 Subject: [PATCH] save --- .../app/controller/AdminRuleController.php | 45 ++++++++++++++++--- src/plugin/admin/app/view/user/index.html | 10 +++-- src/plugin/admin/public/admin/css/reset.css | 4 ++ .../admin/public/admin/js/permission.js | 22 +++++++++ 4 files changed, 70 insertions(+), 11 deletions(-) create mode 100644 src/plugin/admin/public/admin/js/permission.js diff --git a/src/plugin/admin/app/controller/AdminRuleController.php b/src/plugin/admin/app/controller/AdminRuleController.php index c0dda1f..756fbfb 100644 --- a/src/plugin/admin/app/controller/AdminRuleController.php +++ b/src/plugin/admin/app/controller/AdminRuleController.php @@ -19,7 +19,7 @@ class AdminRuleController extends Crud * * @var string[] */ - public $noNeedAuth = ['get']; + public $noNeedAuth = ['get', 'controller']; /** * @var AdminRule @@ -62,7 +62,8 @@ class AdminRuleController extends Crud */ function get(Request $request): Response { - [$rules, $items] = $this->getRulesAndItems(); + $rules = $this->getRules(admin('roles')); + $items = AdminRule::orderBy('weight', 'desc')->get()->toArray(); $types = $request->get('type', '0,1'); $types = is_string($types) ? explode(',', $types) : [0, 1]; $items_map = []; @@ -98,6 +99,38 @@ class AdminRuleController extends Crud return $this->json(0, 'ok', $formatted_items); } + /** + * 获取控制器详细权限 + * @param Request $request + * @return Response + */ + public function controller(Request $request): Response + { + $controller = $request->get('controller'); + if (!$controller) { + return $this->json(0, 'ok', []); + } + $rules = $this->getRules(admin('roles')); + // 超级管理员 + if (in_array('*', $rules)) { + return $this->json(0, 'ok', ['*']); + } + // 获取详细权限 + $controller_search = str_replace('\\', '\\\\', $controller); + $keys = AdminRule::where('key', 'like', "$controller_search%") + ->whereIn('id', $rules)->pluck('key'); + $permissions = []; + $prefix_length = strlen($controller); + foreach ($keys as $key) { + if ($key === $controller) { + $permissions = ['*']; + break; + } + $permissions[] = substr($key, $prefix_length); + } + return $this->json(0, 'ok', $permissions); + } + /** * 根据类同步规则到数据库 * @return void @@ -307,11 +340,11 @@ class AdminRuleController extends Crud /** * 获取权限规则 + * @param $roles * @return array */ - protected function getRulesAndItems(): array + protected function getRules($roles): array { - $roles = admin('roles'); $rules_strings = $roles ? AdminRole::whereIn('id', $roles)->pluck('rules') : []; $rules = []; foreach ($rules_strings as $rule_string) { @@ -320,9 +353,7 @@ class AdminRuleController extends Crud } $rules = array_merge($rules, explode(',', $rule_string)); } - - $items = AdminRule::orderBy('weight', 'desc')->get()->toArray(); - return [$rules, $items]; + return $rules; } /** diff --git a/src/plugin/admin/app/view/user/index.html b/src/plugin/admin/app/view/user/index.html index 4122f5a..66be892 100644 --- a/src/plugin/admin/app/view/user/index.html +++ b/src/plugin/admin/app/view/user/index.html @@ -150,27 +150,29 @@ +