38 lines
		
	
	
		
			687 B
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			687 B
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Enums;
 | |
| 
 | |
| enum Role: string
 | |
| {
 | |
|     case MEMBER = 'member';
 | |
|     case ADMIN = 'admin';
 | |
|     case OWNER = 'owner';
 | |
| 
 | |
|     public function rank(): int
 | |
|     {
 | |
|         return match ($this) {
 | |
|             self::MEMBER => 1,
 | |
|             self::ADMIN => 2,
 | |
|             self::OWNER => 3,
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     public function lt(Role|string $role): bool
 | |
|     {
 | |
|         if (is_string($role)) {
 | |
|             $role = Role::from($role);
 | |
|         }
 | |
| 
 | |
|         return $this->rank() < $role->rank();
 | |
|     }
 | |
| 
 | |
|     public function gt(Role|string $role): bool
 | |
|     {
 | |
|         if (is_string($role)) {
 | |
|             $role = Role::from($role);
 | |
|         }
 | |
| 
 | |
|         return $this->rank() > $role->rank();
 | |
|     }
 | |
| }
 | 
