完善插件权限
This commit is contained in:
parent
72e003e166
commit
a11607c6c3
|
|
@ -21,14 +21,14 @@ class PermissionRepo
|
||||||
|
|
||||||
private ?Role $adminRole = null;
|
private ?Role $adminRole = null;
|
||||||
|
|
||||||
public function setUser(AdminUser $user): self
|
public function setUser($user): self
|
||||||
{
|
{
|
||||||
$this->adminUser = $user;
|
$this->adminUser = $user;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setRole(Role $role): self
|
public function setRole($role): self
|
||||||
{
|
{
|
||||||
$this->adminRole = $role;
|
$this->adminRole = $role;
|
||||||
|
|
||||||
|
|
@ -39,10 +39,11 @@ class PermissionRepo
|
||||||
* 所有权限列表
|
* 所有权限列表
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public function getAllPermissions(): array
|
public function getAllPermissions(): array
|
||||||
{
|
{
|
||||||
$permissions = [
|
$corePermissions = [
|
||||||
['title' => trans('admin/common.order'), 'permissions' => $this->getOrderPermissions()],
|
['title' => trans('admin/common.order'), 'permissions' => $this->getOrderPermissions()],
|
||||||
['title' => trans('admin/common.rma'), 'permissions' => $this->getRmaPermissions()],
|
['title' => trans('admin/common.rma'), 'permissions' => $this->getRmaPermissions()],
|
||||||
['title' => trans('admin/common.rma_reason'), 'permissions' => $this->getRmaReasonPermissions()],
|
['title' => trans('admin/common.rma_reason'), 'permissions' => $this->getRmaReasonPermissions()],
|
||||||
|
|
@ -71,7 +72,12 @@ class PermissionRepo
|
||||||
['title' => trans('admin/common.country'), 'permissions' => $this->getCountryPermissions()],
|
['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);
|
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;
|
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