权限管理 添加插件权限

This commit is contained in:
pushuo 2023-03-06 18:02:29 +08:00 committed by Edward Yang
parent e54d9bbc45
commit 571eba695d
11 changed files with 57 additions and 13 deletions

View File

@ -34,7 +34,8 @@ class AdminRoleController extends Controller
{
$permissionRepo = (new PermissionRepo());
$data = [
'permissions' => $permissionRepo->getAllPermissions(),
'core_permissions' => $permissionRepo->getRoleCorePermissions(),
'plugin_permissions' => $permissionRepo->getRolePluginPermissions(),
];
$data = hook_filter('admin.admin_role.create.data', $data);
@ -48,7 +49,8 @@ class AdminRoleController extends Controller
$role = Role::query()->findOrFail($id);
$permissionRepo = (new PermissionRepo())->setRole($role);
$data = [
'permissions' => $permissionRepo->getAllPermissions(),
'core_permissions' => $permissionRepo->getRoleCorePermissions(),
'plugin_permissions' => $permissionRepo->getRolePluginPermissions(),
'role' => $role,
];
$data = hook_filter('admin.admin_role.edit.data', $data);

View File

@ -41,7 +41,7 @@ class PermissionRepo
* @return array
* @throws \Exception
*/
public function getAllPermissions(): array
public function getRoleCorePermissions(): array
{
$corePermissions = [
['title' => trans('admin/common.order'), 'permissions' => $this->getOrderPermissions()],
@ -73,11 +73,23 @@ class PermissionRepo
];
$corePermissions = hook_filter('role.permissions.all', $corePermissions);
return $corePermissions;
}
/**
* 插件权限
*
* @return array
* @throws \Exception
*/
public function getRolePluginPermissions(): array
{
$pluginPermissions = hook_filter('role.permissions.plugin', []);
$pluginPermissions = $this->handlePluginPermission($pluginPermissions);
return array_merge($corePermissions, $pluginPermissions);
return $pluginPermissions;
}
/**

View File

@ -13,13 +13,35 @@
<el-form-item label="{{ __('admin/admin_roles.permission') }}" prop="roles">
<div class="roles-wrap border w-max-900">
<div class="bg-dark p-2 text-dark bg-opacity-10 px-2">
<el-button size="small" @click="updateAllState(true)">@lang('admin/admin_roles.select_all')</el-button>
<el-button size="small" @click="updateAllState(false)">@lang('admin/admin_roles.unselect_all')</el-button>
<el-button size="small" @click="updateAllState('permissions', true)">@lang('admin/admin_roles.select_all')</el-button>
<el-button size="small" @click="updateAllState('permissions', false)">@lang('admin/admin_roles.unselect_all')</el-button>
</div>
<div v-for="role, index in form.permissions" :key="index">
<div class="bg-light px-2 d-flex">
@{{ role.title }}
<div class="row-update ms-2 link-secondary">[<span @click="updateState(true, index)">{{ __('common.select_all') }}</span> / <span @click="updateState(false, index)">{{ __('common.cancel') }}</span>]</div>
<div class="row-update ms-2 link-secondary">[<span @click="updateState('permissions', true, index)">{{ __('common.select_all') }}</span> / <span @click="updateState('permissions', false, index)">{{ __('common.cancel') }}</span>]</div>
</div>
<div class="role-methods">
<div class="d-flex flex-wrap px-3">
<div v-for="method,index in role.permissions" class="me-3">
<el-checkbox class="text-dark" v-model="method.selected">@{{ method.name }}</el-checkbox>
</div>
</div>
</div>
</div>
</div>
</el-form-item>
<el-form-item label="{{ __('admin/admin_roles.plugin_permission') }}" prop="roles">
<div class="roles-wrap border w-max-900">
<div class="bg-dark p-2 text-dark bg-opacity-10 px-2">
<el-button size="small" @click="updateAllState('plugin_permissions', true)">@lang('admin/admin_roles.select_all')</el-button>
<el-button size="small" @click="updateAllState('plugin_permissions', false)">@lang('admin/admin_roles.unselect_all')</el-button>
</div>
<div v-for="role, index in form.plugin_permissions" :key="index">
<div class="bg-light px-2 d-flex">
@{{ role.title }}
<div class="row-update ms-2 link-secondary">[<span @click="updateState('plugin_permissions', true, index)">{{ __('common.select_all') }}</span> / <span @click="updateState('plugin_permissions', false, index)">{{ __('common.cancel') }}</span>]</div>
</div>
<div class="role-methods">
<div class="d-flex flex-wrap px-3">
@ -50,8 +72,8 @@
form: {
id: @json($role->id ?? null),
name: @json($role->name ?? ''),
permissions: @json($permissions ?? []),
plugins_permissions: @json($plugins_permissions ?? []),
permissions: @json($core_permissions ?? []),
plugin_permissions: @json($plugin_permissions ?? []),
},
source: {
@ -71,12 +93,12 @@
},
methods: {
updateState(type, index) {
this.form.permissions[index].permissions.map(e => e.selected = !!type)
updateState(key, type, index) {
this.form[key][index].permissions.map(e => e.selected = !!type)
},
updateAllState(type) {
this.form.permissions.forEach(e => {
updateAllState(key, type) {
this.form[key].forEach(e => {
e.permissions.forEach(method => {
method.selected = !!type
});

View File

@ -15,5 +15,6 @@ return [
'role_name' => 'Rollenname',
'role_management' => 'Rollenverwaltung',
'permission' => 'Erlaubnis',
'plugin_permission' => 'Plugin permissions',
'error_roles' => 'Bitte mindestens eine Rolle auswählen',
];

View File

@ -16,5 +16,6 @@ return [
'role_name' => 'Role Name',
'role_management' => 'Role Management',
'permission' => 'Permission',
'plugin_permission' => 'Plugin permissions',
'error_roles' => 'Please select at least one role',
];

View File

@ -15,5 +15,6 @@ return [
'role_name' => 'Nombre de rol',
'role_management' => 'gestión de roles',
'permission' => 'permiso',
'plugin_permission' => 'Plugin permissions',
'error_roles' => 'Seleccione al menos un rol',
];

View File

@ -15,5 +15,6 @@ return [
'role_name' => 'nom du rôle',
'role_management' => 'gestion des rôles',
'permission' => 'autorisation',
'plugin_permission' => 'Plugin permissions',
'error_roles' => 'Veuillez sélectionner au moins un rôle',
];

View File

@ -15,5 +15,6 @@ return [
'role_name' => '役割名',
'role_management' => '役割管理',
'permission' => '許可',
'plugin_permission' => 'プラグインのパーミッション',
'error_roles' => '少なくとも 1 つのロールを選択してください',
];

View File

@ -15,5 +15,6 @@ return [
'role_name' => 'имя роли',
'role_management' => 'управление ролями',
'permission' => 'разрешение',
'plugin_permission' => 'Plugin permissions',
'error_roles' => 'Выберите хотя бы одну роль',
];

View File

@ -16,5 +16,6 @@ return [
'role_management' => '角色管理',
'role' => '角色',
'permission' => '权限',
'plugin_permission' => '插件权限',
'error_roles' => '请至少选择一个角色',
];

View File

@ -15,5 +15,6 @@ return [
'role_name' => '角色名稱',
'role_management' => '角色管理',
'permission' => '權限',
'plugin_permission' => '插件權限',
'error_roles' => '請至少選擇一個角色',
];