value); } /** * Get all the permissions for this role. * * @return array */ public function permissions(): array { return match ($this) { self::Owner => TeamPermission::cases(), self::Admin => [ TeamPermission::UpdateTeam, TeamPermission::CreateInvitation, TeamPermission::CancelInvitation, ], self::Member => [], }; } /** * Determine if the role has the given permission. */ public function hasPermission(TeamPermission $permission): bool { return in_array($permission, $this->permissions()); } /** * Get the hierarchy level for this role. * Higher numbers indicate higher privileges. */ public function level(): int { return match ($this) { self::Owner => 3, self::Admin => 2, self::Member => 1, }; } /** * Check if this role is at least as privileged as another role. */ public function isAtLeast(TeamRole $role): bool { return $this->level() >= $role->level(); } /** * Get the roles that can be assigned to team members (excludes Owner). * * @return array */ public static function assignable(): array { return collect(self::cases()) ->filter(fn (self $role) => $role !== self::Owner) ->map(fn (self $role) => ['value' => $role->value, 'label' => $role->label()]) ->values() ->toArray(); } }