68 lines
2.1 KiB
PHP
68 lines
2.1 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace App\Enums;
|
|
|
|
enum Permission: string
|
|
{
|
|
case Role = 'role';
|
|
case User = 'user';
|
|
case CaptchaToken = 'captcha_token';
|
|
|
|
public function getPermissions(): array
|
|
{
|
|
$permissions = match ($this) {
|
|
self::CaptchaToken => [
|
|
'view' => __('permissions.Allowed to watch all tokens'),
|
|
'view_own' => __('permissions.Allowed to view own tokens'),
|
|
'create' => __('permissions.Allowed to create tokens'),
|
|
'update' => __('permissions.Allowed to edit all tokens'),
|
|
'update_own' => __('permissions.Allowed to edit own tokens'),
|
|
'delete' => __('permissions.Allowed to delete all tokens'),
|
|
'delete_own' => __('permissions.Allowed to delete own tokens'),
|
|
],
|
|
default => $this->getBasePermissions()
|
|
};
|
|
|
|
return $permissions;
|
|
}
|
|
|
|
public function getTitle(): string
|
|
{
|
|
return __('permissions.' . $this->name);
|
|
}
|
|
|
|
public function formatValue(string $permission): string
|
|
{
|
|
return $this->value . '.' . $permission;
|
|
}
|
|
|
|
public static function toArrayList(): array
|
|
{
|
|
$permissions = [];
|
|
foreach (self::cases() as $permissionEnum) {
|
|
foreach ($permissionEnum->getPermissions() as $permissionName => $permissionTitle) {
|
|
$name = $permissionEnum->formatValue($permissionName);
|
|
$title = $permissionEnum->getTitle() . ' - ' . $permissionTitle;
|
|
$permissions[$name] = $title;
|
|
}
|
|
}
|
|
|
|
return $permissions;
|
|
}
|
|
|
|
public static function toArrayListCodes(): array
|
|
{
|
|
return \array_keys(self::toArrayList());
|
|
}
|
|
|
|
private function getBasePermissions(): array
|
|
{
|
|
return [
|
|
'view' => __('permissions.Allowed to watch'),
|
|
'create' => __('permissions.Allowed to create'),
|
|
'update' => __('permissions.Allowed to edit'),
|
|
'delete' => __('permissions.Allowed to delete'),
|
|
];
|
|
}
|
|
}
|