38 lines
966 B
PHP
38 lines
966 B
PHP
<?php
|
|
|
|
namespace App\Enums;
|
|
|
|
/**
|
|
* Account role. Hierarchy: admin > operator > viewer. admin has every ability; operator can run
|
|
* day-to-day operations (services, files, terminal to managed servers) but not the dangerous
|
|
* control-plane actions; viewer is read-only.
|
|
*/
|
|
enum Role: string
|
|
{
|
|
case Admin = 'admin';
|
|
case Operator = 'operator';
|
|
case Viewer = 'viewer';
|
|
|
|
/** Numeric rank for hierarchy comparisons. */
|
|
public function rank(): int
|
|
{
|
|
return match ($this) {
|
|
self::Admin => 3,
|
|
self::Operator => 2,
|
|
self::Viewer => 1,
|
|
};
|
|
}
|
|
|
|
/** True when this role is at least as privileged as $other. */
|
|
public function atLeast(self $other): bool
|
|
{
|
|
return $this->rank() >= $other->rank();
|
|
}
|
|
|
|
/** Localised label (lang/{de,en}/roles.php key role_<value>). */
|
|
public function label(): string
|
|
{
|
|
return (string) __('roles.role_'.$this->value);
|
|
}
|
|
}
|