mirror of
https://github.com/pelican-dev/panel.git
synced 2025-05-20 08:44:46 +02:00
Allow to register custom role permissions (#1208)
This commit is contained in:
parent
c3b8b71f9c
commit
20f271041a
@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Filament\Admin\Resources;
|
namespace App\Filament\Admin\Resources;
|
||||||
|
|
||||||
use App\Enums\RolePermissionModels;
|
|
||||||
use App\Enums\RolePermissionPrefixes;
|
|
||||||
use App\Filament\Admin\Resources\RoleResource\Pages;
|
use App\Filament\Admin\Resources\RoleResource\Pages;
|
||||||
use App\Models\Role;
|
use App\Models\Role;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
use Filament\Forms\Components\Actions\Action;
|
||||||
@ -95,32 +93,16 @@ class RoleResource extends Resource
|
|||||||
|
|
||||||
public static function form(Form $form): Form
|
public static function form(Form $form): Form
|
||||||
{
|
{
|
||||||
$permissions = [];
|
$permissionSections = [];
|
||||||
|
|
||||||
foreach (RolePermissionModels::cases() as $model) {
|
foreach (Role::getPermissionList() as $model => $permissions) {
|
||||||
$options = [];
|
$options = [];
|
||||||
|
|
||||||
foreach (RolePermissionPrefixes::cases() as $prefix) {
|
foreach ($permissions as $permission) {
|
||||||
$options[$prefix->value . ' ' . strtolower($model->value)] = Str::headline($prefix->value);
|
$options[$permission . ' ' . strtolower($model)] = Str::headline($permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array_key_exists($model->value, Role::MODEL_SPECIFIC_PERMISSIONS)) {
|
$permissionSections[] = self::makeSection($model, $options);
|
||||||
foreach (Role::MODEL_SPECIFIC_PERMISSIONS[$model->value] as $permission) {
|
|
||||||
$options[$permission . ' ' . strtolower($model->value)] = Str::headline($permission);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$permissions[] = self::makeSection($model->value, $options);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (Role::SPECIAL_PERMISSIONS as $model => $prefixes) {
|
|
||||||
$options = [];
|
|
||||||
|
|
||||||
foreach ($prefixes as $prefix) {
|
|
||||||
$options[$prefix . ' ' . strtolower($model)] = Str::headline($prefix);
|
|
||||||
}
|
|
||||||
|
|
||||||
$permissions[] = self::makeSection($model, $options);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $form
|
return $form
|
||||||
@ -137,7 +119,7 @@ class RoleResource extends Resource
|
|||||||
->hidden(),
|
->hidden(),
|
||||||
Fieldset::make(trans('admin/role.permissions'))
|
Fieldset::make(trans('admin/role.permissions'))
|
||||||
->columns(3)
|
->columns(3)
|
||||||
->schema($permissions)
|
->schema($permissionSections)
|
||||||
->hidden(fn (Get $get) => $get('name') === Role::ROOT_ADMIN),
|
->hidden(fn (Get $get) => $get('name') === Role::ROOT_ADMIN),
|
||||||
Placeholder::make('permissions')
|
Placeholder::make('permissions')
|
||||||
->label(trans('admin/role.permissions'))
|
->label(trans('admin/role.permissions'))
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use App\Enums\RolePermissionModels;
|
||||||
|
use App\Enums\RolePermissionPrefixes;
|
||||||
use Spatie\Permission\Models\Role as BaseRole;
|
use Spatie\Permission\Models\Role as BaseRole;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,6 +43,76 @@ class Role extends BaseRole
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/** @var array<string, array<string>> */
|
||||||
|
protected static array $customPermissions = [];
|
||||||
|
|
||||||
|
/** @param array<string, array<string>> $customPermissions */
|
||||||
|
public static function registerCustomPermissions(array $customPermissions): void
|
||||||
|
{
|
||||||
|
static::$customPermissions = [
|
||||||
|
...static::$customPermissions,
|
||||||
|
...$customPermissions,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function registerCustomDefaultPermissions(string $model): void
|
||||||
|
{
|
||||||
|
$permissions = [];
|
||||||
|
|
||||||
|
foreach (RolePermissionPrefixes::cases() as $prefix) {
|
||||||
|
$permissions[] = $prefix->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static::registerCustomPermissions([
|
||||||
|
$model => $permissions,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return array<string, array<string>> */
|
||||||
|
public static function getPermissionList(): array
|
||||||
|
{
|
||||||
|
$allPermissions = [];
|
||||||
|
|
||||||
|
// Standard permissions for our default model
|
||||||
|
foreach (RolePermissionModels::cases() as $model) {
|
||||||
|
$allPermissions[$model->value] ??= [];
|
||||||
|
|
||||||
|
foreach (RolePermissionPrefixes::cases() as $prefix) {
|
||||||
|
array_push($allPermissions[$model->value], $prefix->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (array_key_exists($model->value, Role::MODEL_SPECIFIC_PERMISSIONS)) {
|
||||||
|
foreach (static::MODEL_SPECIFIC_PERMISSIONS[$model->value] as $permission) {
|
||||||
|
array_push($allPermissions[$model->value], $permission);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Special permissions for our default models
|
||||||
|
foreach (static::SPECIAL_PERMISSIONS as $model => $prefixes) {
|
||||||
|
$allPermissions[$model] ??= [];
|
||||||
|
|
||||||
|
foreach ($prefixes as $prefix) {
|
||||||
|
array_push($allPermissions[$model], $prefix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Custom third party permissions
|
||||||
|
foreach (static::$customPermissions as $model => $prefixes) {
|
||||||
|
$allPermissions[$model] ??= [];
|
||||||
|
|
||||||
|
foreach ($prefixes as $prefix) {
|
||||||
|
array_push($allPermissions[$model], $prefix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($allPermissions as $model => $permissions) {
|
||||||
|
$allPermissions[$model] = array_unique($permissions);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $allPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
public function isRootAdmin(): bool
|
public function isRootAdmin(): bool
|
||||||
{
|
{
|
||||||
return $this->name === self::ROOT_ADMIN;
|
return $this->name === self::ROOT_ADMIN;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user