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_). */ public function label(): string { return (string) __('roles.role_'.$this->value); } }