完善插件权限
This commit is contained in:
parent
72e003e166
commit
a11607c6c3
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据模块和路由返回权限列表
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue