123 lines
3.6 KiB
PHP
123 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Enums;
|
|
|
|
use App\Traits\ProvidesEnumOptions;
|
|
|
|
enum Role: string
|
|
{
|
|
use ProvidesEnumOptions;
|
|
|
|
case DEVELOPER = 'developer';
|
|
case OWNER = 'owner';
|
|
case ADMIN_TOKO = 'admin-toko';
|
|
case ADMIN_BAHAN_BAKU = 'admin-bahan-baku';
|
|
case DIREKTUR = 'direktur';
|
|
case MARKETING = 'marketing';
|
|
case NON_OPERATOR = 'non-operator';
|
|
|
|
public function label(): string
|
|
{
|
|
return match ($this) {
|
|
self::DEVELOPER => 'Developer',
|
|
self::OWNER => 'Owner',
|
|
self::ADMIN_TOKO => 'Admin Toko',
|
|
self::ADMIN_BAHAN_BAKU => 'Admin Bahan Baku',
|
|
self::DIREKTUR => 'Direktur',
|
|
self::MARKETING => 'Marketing',
|
|
self::NON_OPERATOR => 'Non Operator',
|
|
};
|
|
}
|
|
|
|
/**
|
|
* @return list<Permission>
|
|
*/
|
|
public function permissions(): array
|
|
{
|
|
return match ($this) {
|
|
self::DEVELOPER, self::OWNER => Permission::cases(),
|
|
self::DIREKTUR => [
|
|
Permission::DASHBOARD_VIEW,
|
|
Permission::EMPLOYEES_VIEW,
|
|
Permission::EMPLOYEES_CREATE,
|
|
Permission::EMPLOYEES_UPDATE,
|
|
Permission::EMPLOYEES_DELETE,
|
|
Permission::EMPLOYEES_RESET_PASSWORD,
|
|
Permission::EMPLOYEES_TOGGLE_STATUS,
|
|
Permission::CATEGORIES_VIEW,
|
|
Permission::CATEGORIES_CREATE,
|
|
Permission::CATEGORIES_UPDATE,
|
|
Permission::CATEGORIES_DELETE,
|
|
],
|
|
self::ADMIN_TOKO => [
|
|
Permission::DASHBOARD_VIEW,
|
|
Permission::EMPLOYEES_VIEW,
|
|
Permission::EMPLOYEES_CREATE,
|
|
Permission::EMPLOYEES_UPDATE,
|
|
Permission::EMPLOYEES_RESET_PASSWORD,
|
|
Permission::EMPLOYEES_TOGGLE_STATUS,
|
|
Permission::CATEGORIES_VIEW,
|
|
Permission::CATEGORIES_CREATE,
|
|
Permission::CATEGORIES_UPDATE,
|
|
Permission::CATEGORIES_DELETE,
|
|
],
|
|
self::ADMIN_BAHAN_BAKU => [
|
|
Permission::DASHBOARD_VIEW,
|
|
Permission::EMPLOYEES_VIEW,
|
|
Permission::CATEGORIES_VIEW,
|
|
Permission::CATEGORIES_CREATE,
|
|
Permission::CATEGORIES_UPDATE,
|
|
Permission::CATEGORIES_DELETE,
|
|
],
|
|
self::MARKETING => [
|
|
Permission::DASHBOARD_VIEW,
|
|
Permission::EMPLOYEES_VIEW,
|
|
Permission::CATEGORIES_VIEW,
|
|
],
|
|
self::NON_OPERATOR => [
|
|
Permission::DASHBOARD_VIEW,
|
|
],
|
|
};
|
|
}
|
|
|
|
public function isAssignable(): bool
|
|
{
|
|
return $this !== self::DEVELOPER;
|
|
}
|
|
|
|
/**
|
|
* @return list<array{value: string, label: string}>
|
|
*/
|
|
public static function assignableSelectOptions(): array
|
|
{
|
|
return collect(self::cases())
|
|
->filter(fn (self $role) => $role->isAssignable())
|
|
->map(fn (self $role) => [
|
|
'value' => $role->value,
|
|
'label' => $role->label(),
|
|
])
|
|
->values()
|
|
->all();
|
|
}
|
|
|
|
/**
|
|
* @return list<string>
|
|
*/
|
|
public static function assignableValues(): array
|
|
{
|
|
return collect(self::cases())
|
|
->filter(fn (self $role) => $role->isAssignable())
|
|
->map(fn (self $role) => $role->value)
|
|
->values()
|
|
->all();
|
|
}
|
|
|
|
/**
|
|
* @return list<string>
|
|
*/
|
|
public static function values(): array
|
|
{
|
|
return array_column(self::cases(), 'value');
|
|
}
|
|
}
|