service-captcha/app/Enums/Permission.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'),
];
}
}