Index

User

MMO\oauth\entities · 1 symbol · generated 5 Oct 2026

class

User

User.php:18

Model for user

#[MMO\core\attributes\ArrayProperty(name: 'password', setter: 'setPassword')] class MMO\oauth\entities\User extends MMO\core\entities\Entity implements MMO\oauth\interfaces\iUser use MMO\oauth\classes\tUser
Namespace
MMO\oauth\entities
Extends
Entity
Implements
iUser
Uses traits
tUser

Index

clientFlagsClient flags
config
email
firstname
lastname
lastPasswordChangeLast date the password was changed.
passhashPassword hash: stored, never exported (an API response, a user embedded in another entity's)
rolesRoles associated with the token.
scopes
username
addRole($role)
allow($uids)Add scope if it is not already disallowed
applyScopes($scopes, $set)Apply this scopes onto a list of scopes
blameOwnScope($uid)
blameScope($uid)
clearRoles()
clearScopes()
disallow($uids)
getClientFlagsText($separator)Get the flags as text
getClientRedirectUri()Returns the registered redirect URI (as a string).
getClientSecret()
getConfig()
getEmail()
getLastPasswordChange()
getOwnScope($uid)
getOwnScopes()Return an array of scopes associated with the token.
getRoles()
getScope($uid)
getScopes()Return an array of scopes associated with the token.
getUniqueName()
getUsername()
hasClientFlag($flag)
hasRole($role)
hasScope($uid)
isAllowed($uids)Test if all scopes are allowed
isAnyAllowed($uids)Test if any scope is allowed Scopes expressed as string can be a list of scope's uid seperated by a space (in this case, all scopes MUST be allowed).
isConfidential()Returns true if the client is confidential.
removeRole($role)
scopesText($separator, $true, $false)
setLastPasswordChange($datetime)
setPassword($pwd, $verify)
setRoles($roles)
setScope($uid, $value)Set the scope's value
setScopes($scopes)
setUsername($value)The property is declared readonly.
updateClientFlag($flag, $value)
verifySecret($pwd)

Properties10

clientFlags

Client flags

#[MMO\core\attributes\ArrayProperty()] protected int $clientFlags = 0
Type
int

config

#[MMO\core\attributes\ArrayProperty()] protected array $config = []
Type
array

email

#[MMO\core\attributes\ArrayProperty()] protected ?string $email = null
Type
null | string

firstname

#[MMO\core\attributes\ArrayProperty()] protected string $firstname
Type
string

lastname

#[MMO\core\attributes\ArrayProperty()] protected string $lastname
Type
string

lastPasswordChange

Last date the password was changed.

#[MMO\core\attributes\ArrayProperty(setter: false, store: true)] protected ?DateTime $lastPasswordChange = null
Type
null | DateTime

passhash

Password hash: stored, never exported (an API response, a user embedded in another entity's)

#[MMO\core\attributes\ArrayProperty(setter: false, store: true)] protected string $passhash
Type
string

roles

Roles associated with the token.

#[MMO\core\attributes\ArrayProperty(schema: '[MMO\\oauth\\entities\\Role]')] protected array $roles = []
Type
array

scopes

#[MMO\core\attributes\Serialize(serialize: 'getOwnScopes')] #[MMO\core\attributes\ArrayProperty(schema: '{...: bool}')] protected array $scopes = []
Type
array

username

#[MMO\core\attributes\ArrayProperty(setter: false, store: true)] protected string $username = ''
Type
string

Methods37

allow($uids)

tWithScopes.php:100

Add scope if it is not already disallowed

function allow(object|string ...$uids): void
...$uidsobject | stringlist of scope's uid separated by space or a list of uid
returnsvoid

applyScopes($scopes, $set)

tWithScopes.php:136

Apply this scopes onto a list of scopes

function applyScopes(array &$scopes, bool $set = false): void
$scopesarraylist of {scope:uid} => {allow:bool}
$set = falseboolmergeScopes
returnsvoid

getClientFlagsText($separator)

tClient.php:64

Get the flags as text

function getClientFlagsText(?string $separator = ','): array|string
$separator = ','null | stringif null, will return an array
returnsarray | string

getClientRedirectUri()

tUser.php:115

Returns the registered redirect URI (as a string).

function getClientRedirectUri(): string
returnsstring

getOwnScopes()

tWithScopes.php:40

Return an array of scopes associated with the token.

function getOwnScopes(): array
returnsarraybool>

getScopes()

tWithRoles.php:79

Return an array of scopes associated with the token.

function getScopes(): array
returnsarrayiScope>

isAnyAllowed($uids)

tWithScopes.php:125

Test if any scope is allowed Scopes expressed as string can be a list of scope's uid seperated by a space (in this case, all scopes MUST be allowed).

function isAnyAllowed(object|string ...$uids): bool
...$uidsobject | string
returnsbool

isConfidential()

tUser.php:125

Returns true if the client is confidential.

function isConfidential(): boolConfidential client are generally web application that use rest to get the credentials. User-agent (browser) or native application are usually public clients.
returnsbool

scopesText($separator, $true, $false)

tWithScopes.php:44
function scopesText(string $separator = ' | ', string $true = '✓', string $false = '✗'): string
$separator = ' | 'string
$true = '✓'string
$false = '✗'string
returnsstring

setPassword($pwd, $verify)

tUser.php:68
function setPassword(string $pwd, bool $verify = true): bool
$pwdstring
$verify = truebool
returnsbool

setScope($uid, $value)

tWithScopes.php:65

Set the scope's value

function setScope(object|string $uid, ?bool $value): void
$uidobject | string
$valuenull | boolif null, remove the scope from the list of scopes
returnsvoid

setUsername($value)

tUser.php:59

The property is declared readonly. $entity['username'] = 'xxx' will not work.

function setUsername(string $value): boolBut calling directly this function will set the username. WARNING: you MUST verify that the username is unique before calling this function. `ClientRepository::isUsernameAvailable`
$valuestring
returnsbool

updateClientFlag($flag, $value)

tClient.php:47
function updateClientFlag(int $flag, bool $value = true): bool
$flagint
$value = truebool
returnsbool
Inherited members (114)
ConstantsDeclared byDescription
FLAG_CHANGEDiEntity
FLAG_CREATEDiEntity
FLAG_FIRST_CONNECTIONiClient
FLAG_IGNORE_CHANGEiEntity
FLAG_IGNORE_ENTITYiEntity
FLAG_OPACIFYiEntity
FLAG_REMOVEDiEntity
FLAG_RESET_SECRETiClient
FLAG_USER_DEFINEDiClient
PropertiesDeclared byDescription
ArrayPropertiesaEntity
changesaEntity
collectionEntity
ctimeEntity
errorsaEntity
flagsaEntity
idEntityidentifier in collection
labelEntityshort name
linksaEntity
mtimeEntity
SearchPropertiesaEntity
statusaEntity
titleEntitylong name
MethodsDeclared byDescription
addFlags($flags)aEntity
addLink($link)aEntityAppend a link.
archive()aEntityThis function is called to 'delete' the entity.
ArrayProperties()aEntityBuild (once per class, then cached in the static $ArrayProperties array) the list of every #[ArrayProperty] declared on this class, its parent classes, and the traits they use -- by reflection…
ArrayProperty($name)aEntity
CheckData($data, $errors)aEntityCheck data before it touches any entity: would an entity made from $data be valid?
clearChanges()aEntityReset change tracking: clears iEntity::FLAG_CHANGED and forgets every recorded change.
compareTo($value)aEntityCompare value
conversionError($key, $e)aEntityThe error recorded for a value that could not be set at all (usually: it could not be converted to its property's type), in the same form as a validation error.
Copy($entity, $properties)EntityBuild a new entity from $entity's own stored data (a duplicate, minus its id -- so saving it creates a genuinely new record -- in the same collection).
debugName()aEntity
get($path, $default)aEntityRead a (possibly nested) value by json-path, e.g.
getArrayProperty($key, $isRef, $store)aEntityRead a single array property's current value, through its getter (a direct property, a path alias, or a method).
getChanges($asArray, $store)aEntity
getCollection()Entity
getCtime()Entity
getErrors()aEntity
getFlags()aEntity
getId()Entity
getLabel()Entity
getLinks()aEntity
getLinksByRel($rels, $all)aEntityGet a list of Reference that have a specific relationship.
getMetadata()aEntity
getMtime()Entity
getRepository()Entity
getStatus()aEntity
getTitle()Entity
getView()aEntity
hasChanged($keys)aEntity
hasFlags($flags, $strict)aEntity
hasStatusChanged()aEntity
HiddenPath($path)aEntityThe hidden property (ArrayProperty::isHidden) a json-path goes through, known from the declared types alone: of this class, or of a class a property on the way may hold -- every class of its t…
ignore()EntityIgnore everything about this entity: discard its pending changes and flag it so it's skipped by future commits (aRepository::onCommit).
ignoreChanges($value)aEntityTemporarily suppress markChanged (used e.g.
isActive()aEntity
isArchive()aEntity
isArrayPropertySet($key, $store)EntitySame as aEntity::isArrayPropertySet, but 'ctime'/'mtime' are never reported as "set" (they're always present, so listing them adds no information), and neither is 'id' once the entity is alrea…
isChanged()aEntity
isCreated()aEntity
isDraft()aEntity
isEmpty()aEntity
isFinal()aEntity
isHiddenPath($path)aEntity
isIgnored()Entity
isOpacified()aEntity
isPending()aEntity
isRemoved()aEntity
isSimilar($value)Entity
isUnique()aEntityTells if an entity has enough information to be unique (at least one unique group has no null)
isValid()aEntity
isValidated()aEntity
ListClassReferences($onlyStorable)aEntityGet a list of all the classes and their properties that are using references to this class.
loadArray($data, $coerceOptions, $fromStore)EntitySame as aEntity::loadArray, but 'ctime'/'mtime' are never taken from $data: they belong to the server (set when the entity is created, bumped by markChanged), and a client sending back th…
loadFromStore($data)EntityRestore from stored data, setting 'ctime'/'mtime' directly (bypassing their normal setters -- see setCtime/setMtime, which are read-only via #[ArrayProperty]).
localName()Entity
loopReferences()EntityYield all the entities in the repository that have a reference on this one.
markChanged($keys)EntitySame as aEntity::markChanged, also bumping $mtime to now -- unless the change itself was to 'ctime'/'mtime' (avoiding infinite recursion via setMtime's own markChanged call).
mutate($type, $path, $value, $oldValue)aEntity\MMO\core\interfaces\iMutationObserver::mutate -- besides the normal tArrayProperties::mutate behavior, walks up $path to find the nearest enclosing aEntity (the mutation may have happened dee…
offsetExists($key)aEntity\ArrayAccess::offsetExists -- tells whether $key is a *declared* #[ArrayProperty], not whether it currently holds a non-default value (use isArrayPropertySet for that).
offsetGet($key)aEntity\ArrayAccess::offsetGet
offsetSet($key, $value)aEntity\ArrayAccess::offsetSet
offsetUnset($key)aEntity\ArrayAccess::offsetUnset -- equivalent to setting the property to null (its coerced value depends on the property's schema: e.g.
opacify($value)aEntityHide this entity's properties from toArray output (typically used to redact an entity the current viewer isn't allowed to see the details of, while still letting it be referenced by uid/metadata).
push($path, $value)aEntityAppend a value to a (possibly nested) list property by json-path.
reload()EntityReload entity from its repository
removeFlags($flags)aEntity
removeLink($link)aEntityRemove a link (by identity).
removePermanently($force)EntityRemove entity from database
replaceBy($replace, $mergeData)EntityReplace this entity by another one, trying to change all references to this entity to the new one.
Schema()aEntityThe JSON-Schema describing every #[ArrayProperty] of this class (built once and cached by ArrayProperties).
SearchProperty($name)aEntity
set($path, $value)aEntityWrite a (possibly nested) value by json-path, creating intermediate structure as needed.
setArrayProperty($key, $value, $coerceOptions, $ignoreReadonly)aEntitySame as tArrayProperties::setArrayProperty, plus: any coercion/validation failure is caught and recorded in getErrors (making the entity isValid()-false) instead of propagating as an…
setArrayPropertyOffset($key, $offset, $value, $coerceOptions)aEntitySame as tArrayProperties::setArrayPropertyOffset, plus: when pushing (offset === null) a new entity onto a list property, if an existing item is isSimilar to the new value, that item's of…
setCollection($collection, $removeFromCollection)EntityMove this entity to (or out of, if null) a collection.
setCtime($date, $force)EntitySet creation time
setId($id)EntitySet the id, re-registering this entity in its $collection under the new id (Collection's entities are keyed by id).
setLinks($links)aEntityReplace every link with $links.
setMtime($date, $force)EntitySet modification time
setStatus($status)aEntity
store()aEntityExport all array properties with store set to true.
test($filter)aEntity
toArray($fields, $flatten, $recursive)aEntitySame as tArrayProperties::toArray, except an isOpacified entity always exports only its 'uid' and 'metadata' (its other properties are hidden from output).
toLink($attributes)aEntity
traitMutate($type, $path, $value, $oldValue)aEntity\MMO\core\interfaces\iMutationObserver::mutate -- reacts to a mutation that happened deep inside one of this object's array properties (e.g.
traitSetArrayProperty($key, $value, $coerceOptions, $fromStore)aEntitySet array property
traitSetArrayPropertyOffset($key, $offset, $value, $coerceOptions)aEntitySet/push a value into an array property
traitToArray($fields, $flatten, $recursive)aEntityExport fields to an array.
uid()Entity
validate($errors)aEntityValidate this entity: its current values against its own tArrayProperties::Schema, plus every value that could not even be set -- one that could not be converted to its property's type never r…
View()aEntity
__construct($data, $collection)Entity