119 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\b\authnz;
 | |
| 
 | |
| use ArrayAccess;
 | |
| use nur\A;
 | |
| use nur\b\coll\TBaseArray;
 | |
| use nur\b\coll\TGenericArray;
 | |
| use nur\str;
 | |
| 
 | |
| class SimpleUser implements IAuthzUser, ArrayAccess {
 | |
|   use TBaseArray, TGenericArray;
 | |
| 
 | |
|   const SCHEMA = SimpleUserManager::USER_SCHEMA;
 | |
| 
 | |
|   function __construct($data) {
 | |
|     $this->data = $data;
 | |
|   }
 | |
| 
 | |
|   function __sleep(): array {
 | |
|     return ["data"];
 | |
|   }
 | |
| 
 | |
|   function isValid(): bool {
 | |
|     return !$this->data["disabled"];
 | |
|   }
 | |
|   
 | |
|   function getUsername(): string {
 | |
|     return $this->data["username"];
 | |
|   }
 | |
|   
 | |
|   function validatePassword(string $password): bool {
 | |
|     return $password === $this->data["password"];
 | |
|   }
 | |
|   
 | |
|   function getDisplayName(): ?string {
 | |
|     $display_name = $this->data["display_name"];
 | |
|     if ($display_name === null) $display_name = $this->data["username"];
 | |
|     return $display_name;
 | |
|   }
 | |
|   
 | |
|   function getShortName(): ?string {
 | |
|     $short_name = $this->data["short_name"];
 | |
|     if ($short_name === null) $short_name = $this->data["username"];
 | |
|     return $short_name;
 | |
|   }
 | |
| 
 | |
|   function getMail(): ?string {
 | |
|     return $this->data["mail"];
 | |
|   }
 | |
| 
 | |
|   function getRole(): ?string {
 | |
|     return $this->data["role"];
 | |
|   }
 | |
| 
 | |
|   function isRole($roles): bool {
 | |
|     if ($roles === null) return true;
 | |
|     $myrole = $this->getRole();
 | |
|     foreach (A::with($roles) as $role) {
 | |
|       switch ($role) {
 | |
|       case self::ROLE_ANON:
 | |
|         break;
 | |
|       case self::ROLE_AUTH:
 | |
|         return true;
 | |
|       case self::ROLE_AUTHZ:
 | |
|         if ($myrole !== null || $this->data["perms"]) return true;
 | |
|         break;
 | |
|       default:
 | |
|         if ($role === $myrole) return true;
 | |
|         if (str::ends_with(":*", $role)) {
 | |
|           if (str::starts_with(substr($role, 0, -1), $myrole)) {
 | |
|             return true;
 | |
|           }
 | |
|         }
 | |
|         break;
 | |
|       }
 | |
|     }
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   function debug_getPerms(): ?array {
 | |
|     return $this->data["perms"];
 | |
|   }
 | |
| 
 | |
|   function isPerm($perms): bool {
 | |
|     if ($perms === null) return true;
 | |
|     $myperms = $this->data["perms"];
 | |
|     if ($myperms !== null) {
 | |
|       if (in_array("*", $myperms)) return true;
 | |
|       foreach (A::with($perms) as $perm) {
 | |
|         if (in_array($perm, $myperms)) return true;
 | |
|         if (str::ends_with(":*", $perm)) {
 | |
|           $prefix = substr($perm, 0, -1);
 | |
|           foreach ($myperms as $myperm) {
 | |
|             if (str::starts_with($prefix, $myperm)) {
 | |
|               return true;
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   function debug_getGroups(): ?array {
 | |
|     return $this->data["groups"];
 | |
|   }
 | |
| 
 | |
|   function isGroup($groups): bool {
 | |
|     if ($groups === null) return true;
 | |
|     $mygroups = $this->data["groups"];
 | |
|     if ($mygroups !== null) {
 | |
|       foreach (A::with($groups) as $group) {
 | |
|         if (in_array($group, $mygroups)) return true;
 | |
|       }
 | |
|     }
 | |
|     return false;
 | |
|   }
 | |
| }
 |