From a11607c6c3bc7490cb4a8ffdb15d9fc53105ce46 Mon Sep 17 00:00:00 2001 From: Edward Yang Date: Thu, 2 Mar 2023 22:20:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=8F=92=E4=BB=B6=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- beike/Admin/Repositories/PermissionRepo.php | 44 +++++++++++++++++++-- plugins/Openai/Bootstrap.php | 14 +++++++ 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/beike/Admin/Repositories/PermissionRepo.php b/beike/Admin/Repositories/PermissionRepo.php index 7ff4e3fd..701cc6c6 100644 --- a/beike/Admin/Repositories/PermissionRepo.php +++ b/beike/Admin/Repositories/PermissionRepo.php @@ -21,14 +21,14 @@ class PermissionRepo private ?Role $adminRole = null; - public function setUser(AdminUser $user): self + public function setUser($user): self { $this->adminUser = $user; return $this; } - public function setRole(Role $role): self + public function setRole($role): self { $this->adminRole = $role; @@ -39,10 +39,11 @@ class PermissionRepo * 所有权限列表 * * @return array + * @throws \Exception */ public function getAllPermissions(): array { - $permissions = [ + $corePermissions = [ ['title' => trans('admin/common.order'), 'permissions' => $this->getOrderPermissions()], ['title' => trans('admin/common.rma'), 'permissions' => $this->getRmaPermissions()], ['title' => trans('admin/common.rma_reason'), 'permissions' => $this->getRmaReasonPermissions()], @@ -71,7 +72,12 @@ class PermissionRepo ['title' => trans('admin/common.country'), 'permissions' => $this->getCountryPermissions()], ]; - return hook_filter('role.all_permissions', $permissions); + $corePermissions = hook_filter('role.permissions.all', $corePermissions); + $pluginPermissions = hook_filter('role.permissions.plugin', []); + + $pluginPermissions = $this->handlePluginPermission($pluginPermissions); + + return array_merge($corePermissions, $pluginPermissions); } /** @@ -397,6 +403,36 @@ class PermissionRepo return hook_filter('role.country_permissions', $items); } + /** + * 处理第三方插件权限 + * + * @param $pluginPermissions + * @return array + * @throws \Exception + */ + private function handlePluginPermission($pluginPermissions): array + { + if (empty($pluginPermissions)) { + return []; + } + + foreach ($pluginPermissions as $index => $pluginPermission) { + $itemPermissions = $pluginPermission['permissions'] ?? []; + if (empty($itemPermissions)) { + throw new \Exception('Empty plugin permission!'); + } + foreach ($itemPermissions as $ipIndex => $itemPermission) { + $code = $itemPermission['code'] ?? ''; + if (empty($code)) { + throw new \Exception('Empty plugin permission code!'); + } + $pluginPermissions[$index]['permissions'][$ipIndex]['selected'] = $this->hasPermission($code); + } + } + + return $pluginPermissions; + } + /** * 根据模块和路由返回权限列表 * diff --git a/plugins/Openai/Bootstrap.php b/plugins/Openai/Bootstrap.php index 33895cc1..8aedf248 100644 --- a/plugins/Openai/Bootstrap.php +++ b/plugins/Openai/Bootstrap.php @@ -29,5 +29,19 @@ class Bootstrap return $data; }); + + add_hook_filter('role.permissions.plugin', function ($data) { + $data[] = [ + 'title' => 'OpenAI', + 'permissions' => [ + [ + 'code' => 'openai', + 'name' => 'ChatGPT', + ], + ], + ]; + + return $data; + }); } }