1: <?php
2:
3: namespace LaravelUi5\Core\Enums;
4:
5: /**
6: * Defines symbolic visibility roles for settings.
7: *
8: * These roles determine the minimum permission level required to edit a setting.
9: * Lower integer values indicate higher privileges.
10: */
11: enum SettingVisibilityRole: int
12: {
13: /**
14: * Highest administrative role in the system.
15: */
16: case SuperAdmin = 1;
17:
18: /**
19: * Mandate-level administrators (e.g., consultants or rollout coordinators).
20: */
21: case TenantAdmin = 2;
22:
23: /**
24: * Local administrators within a tenant (e.g., site leads).
25: */
26: case SiteAdmin = 3;
27:
28: /**
29: * Functional leads or team supervisors.
30: */
31: case Supervisor = 4;
32:
33: /**
34: * Regular users with base-level permissions.
35: */
36: case Employee = 5;
37:
38: /**
39: * Returns a human-readable label for the role.
40: *
41: * @return string
42: */
43: public function label(): string
44: {
45: return match ($this) {
46: self::SuperAdmin => 'Super Admin',
47: self::TenantAdmin => 'Tenant Admin',
48: self::SiteAdmin => 'Site Admin',
49: self::Supervisor => 'Supervisor',
50: self::Employee => 'Employee',
51: };
52: }
53:
54: /**
55: * Checks if the current role is sufficient to edit a setting
56: * that requires a given visibility role.
57: *
58: * Example:
59: * SiteAdmin->allows(Employee) => true
60: * Supervisor->allows(SiteAdmin) => false
61: *
62: * @param SettingVisibilityRole $required
63: * @return bool
64: */
65: public function allows(SettingVisibilityRole $required): bool
66: {
67: return $this->value <= $required->value;
68: }
69: }
70: