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;
|
||
|
}
|
||
|
}
|