trait HasPermissions

Traits

Build Permission relations from one immutable partition and team snapshot.

Methods

permissionBelongsToMany(string $related, string $table, string $foreignPivotKey, string $relatedPivotKey, string $relationName, PermissionRelationContext|null $context = null)

Build a partition-aware belongs-to-many relation.

permissionMorphToMany(string $related, string $table, string $foreignPivotKey, string $relatedPivotKey, string $relationName, bool $inverse = false, bool $teamScoped = false, PermissionRelationContext|null $context = null)

Build a partition-aware morph-to-many relation.

permissionRelationQuery(Model $related, PermissionPartition|null $partition)

Build the related query using the relation's captured partition.

void
ensurePermissionRelationParentMatches(PermissionRegistrar $registrar, PermissionPartition|null $partition)

Ensure a partition-bearing relation parent belongs to the captured partition.

applyPermissionPartitionToRelation(BelongsToMany $relation, PermissionPartition|null $partition)

Apply the captured partition to pivot reads and writes.

permissionRegistrar()

Get the permission registrar.

eventDispatcher()

Get the event dispatcher.

static void
bootHasPermissions()

Boot permission cleanup and queued assignment handling.

static array|null
deleteSubjectAssignments(Model $model, string $table)

Delete one kind of assignment for a hard-deleted subject.

static void
deletePermissionRecordAssignments(Model $model, string $modelAssignmentsTable, string $pivotKey)

Delete assignment pivots owned by a Role or Permission record.

string
getPermissionClass()

Get the permission model class.

string
getWildcardClass()

Get the wildcard permission class.

permissions()

A model may have multiple direct permissions.

permissionAssignmentRelation(PermissionRelationContext|null $context = null)

Build the direct permission assignment relation for a captured context.

getCachedDirectPermissions()

Get cached direct permission assignments for this model.

allowedDirectPermissions()

Return allowed direct permissions.

scopePermission(Builder $query, array|Collection|int|Permission|string|UnitEnum $permissions, bool $without = false)

Scope the model query to certain permissions only.

whereEffectivePermission(Builder $query, array $permissionIds)

Add an effective permission predicate for the given permission ids.

wherePermissionEffect(Builder $query, int|string $permissionId, bool $denied)

Add a permission-effect predicate for direct and role-granted permissions.

whereDirectPermissionEffect(Builder $query, int|string $permissionId, bool $denied)

Add a direct permission-effect predicate.

whereRolePermissionEffect(Builder $query, int|string $permissionId, bool $denied)

Add a role permission-effect predicate.

scopeWithoutPermission(Builder $query, array|Collection|int|Permission|string|UnitEnum $permissions)

Scope the model query to only those without certain permissions, whether indirectly by role or by direct permission.

array
convertToPermissionModels(array|Collection|int|Permission|string|UnitEnum $permissions)

No description

filterPermission(int|Permission|string|UnitEnum $permission, string|null $guardName = null)

Find a permission.

bool
hasPermissionTo(int|Permission|string|UnitEnum $permission, string|null $guardName = null)

Determine if the model may perform the given permission.

bool
hasWildcardPermission(int|Permission|string|UnitEnum $permission, string|null $guardName = null)

Validates a wildcard permission against all permissions of a user.

bool
checkPermissionTo(int|Permission|string|UnitEnum $permission, string|null $guardName = null)

An alias to hasPermissionTo(), but avoids throwing an exception.

bool
hasAnyPermission(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Determine if the model has any of the given permissions.

bool
hasAllPermissions(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Determine if the model has all of the given permissions.

bool
hasPermissionViaRole(Permission $permission)

Determine if the model has, via roles, the given permission.

bool
hasDirectPermission(int|Permission|string|UnitEnum $permission)

Determine if the model has the given permission.

getPermissionsViaRoles()

Return all the permissions the model has via roles.

getAllPermissions()

Return all the permissions the model has, both directly and via roles.

givePermissionTo(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Grant the given permission(s) to the model.

denyPermissionTo(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Deny the given permission(s) for the model.

string
assignmentIdIdentity(int|string $id)

Build a collision-safe assignment ID identity.

array
indexAssignmentIds(array $ids)

Index assignment IDs by their collision-safe identities.

int|string
normalizeRelatedPivotId(BelongsToMany $relation, mixed $id)

Normalize an ID read directly from an assignment pivot.

readCurrentAssignmentPivots(BelongsToMany $relation, array $columns, array|null $ids = null)

Read current assignment pivots through their captured relation constraints.

void
attachPermissionAssignments(array $permissions, array $pivot, PermissionRelationContext|null $context = null)

Insert permission assignments into an empty assignment set.

void
queuePermissionAssignments(array $permissions, array $pivot, PermissionRelationContext $context)

Queue permission assignments until the model is saved.

bool
removeQueuedPermissionAssignments(array $permissions, PermissionRelationContext $context)

Remove permission assignments queued for a captured context.

void
flushQueuedPermissionAssignments()

Flush permission assignments queued before the model was saved.

void
attachQueuedPermissionAssignmentBatches(array $assignments)

Attach collapsed queued permission assignment batches.

void
clearQueuedPermissionAssignments()

Clear queued permission assignments after their transaction commits.

void
invalidateQueuedPermissionAssignmentContexts(array $assignments)

Invalidate the captured contexts of committed permission assignments.

array
collapseQueuedPermissionAssignments()

Collapse queued permission assignments to their final edge state.

void
dispatchPermissionAttachedEvent(array $permissions)

Dispatch the permission attached event when enabled and listened for.

bool
permissionAttachedEventIsListenedFor()

Determine whether the permission attached event has listeners.

void
forgetWildcardPermissionIndex()

Forget the wildcard permission index.

syncPermissions(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Remove all current permissions and set the given ones.

array
syncPermissionEffects(array|Collection $allowed = [], array|Collection $denied = [])

Remove all current permissions and set allowed and denied permissions.

revokePermissionTo(Permission|Permission[]|string|string[]|UnitEnum $permission)

Revoke the given permission(s).

void
dispatchPermissionDetachedEvent(mixed $permission)

Dispatch the permission detached event when enabled and listened for.

bool
permissionDetachedEventIsListenedFor()

Determine whether the permission detached event has listeners.

bool
hasDeniedPermission(int|Permission|string|UnitEnum $permission, string|null $guardName = null)

Determine if the model has an explicit denied direct permission.

bool
hasDeniedPermissionViaRoles(int|Permission|string|UnitEnum $permission, string|null $guardName = null)

Determine if the model has an explicit denied permission via roles.

getPermissionsViaRolesWithPivots()

Return permissions granted through the model's roles with role-permission pivot data.

loadPermissionsViaRolesWithPivots()

Load permissions granted through the model's roles with role-permission pivot data.

Model|null
permissionForMatch(mixed $permission, string $guardName)

Resolve a permission for matching without throwing.

array
deniedPermissionKeys(Collection ...$permissionCollections)

Build lookup keys for denied permissions.

string
permissionComparisonKey(Model $permission)

Build a permission comparison key.

permissionWithRolePivot(Model $permission, Model $role)

Clone a permission with the matching role-permission pivot.

bool
pivotIsDenied(Model $model)

Determine if a hydrated pivot marks the permission as denied.

bool
permissionEffectIsDenied(mixed $value)

Normalize a permission assignment effect.

relationCollection(Model $model, string $relation)

Get a hydrated relation collection.

bool
storedPermissionMatches(Model $storedPermission, mixed $permission, string|null $guardName = null)

Determine if a stored permission matches an input permission.

string
guardNameForPermissionMatch(mixed $permission, string|null $guardName = null)

Resolve the guard to use when matching stored permissions.

getPermissionNames()

Get the permission names.

getStoredPermission(array|Collection|int|Permission|string|UnitEnum $permissions, PermissionPartition|null $partition = null)

No description

void
ensureModelSharesGuard(Permission|Role $roleOrPermission)

No description

getGuardNames()

Get the guard names for the model.

string
getDefaultGuardName()

Get the default guard name for the model.

void
forgetCachedPermissions()

Forget the cached permissions.

bool
hasAllDirectPermissions(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Check if the model has All of the requested Direct permissions.

bool
hasAnyDirectPermission(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Check if the model has Any of the requested Direct permissions.

Details

protected BelongsToMany permissionBelongsToMany(string $related, string $table, string $foreignPivotKey, string $relatedPivotKey, string $relationName, PermissionRelationContext|null $context = null)

Build a partition-aware belongs-to-many relation.

Parameters

string $related
string $table
string $foreignPivotKey
string $relatedPivotKey
string $relationName
PermissionRelationContext|null $context

Return Value

BelongsToMany

protected MorphToMany permissionMorphToMany(string $related, string $table, string $foreignPivotKey, string $relatedPivotKey, string $relationName, bool $inverse = false, bool $teamScoped = false, PermissionRelationContext|null $context = null)

Build a partition-aware morph-to-many relation.

Parameters

string $related
string $table
string $foreignPivotKey
string $relatedPivotKey
string $relationName
bool $inverse
bool $teamScoped
PermissionRelationContext|null $context

Return Value

MorphToMany

protected Builder permissionRelationQuery(Model $related, PermissionPartition|null $partition)

Build the related query using the relation's captured partition.

Parameters

Model $related
PermissionPartition|null $partition

Return Value

Builder

protected void ensurePermissionRelationParentMatches(PermissionRegistrar $registrar, PermissionPartition|null $partition)

Ensure a partition-bearing relation parent belongs to the captured partition.

Parameters

PermissionRegistrar $registrar
PermissionPartition|null $partition

Return Value

void

protected BelongsToMany applyPermissionPartitionToRelation(BelongsToMany $relation, PermissionPartition|null $partition)

Apply the captured partition to pivot reads and writes.

Parameters

BelongsToMany $relation
PermissionPartition|null $partition

Return Value

BelongsToMany

at line 51
protected PermissionRegistrar permissionRegistrar()

Get the permission registrar.

Return Value

PermissionRegistrar

at line 59
protected Dispatcher eventDispatcher()

Get the event dispatcher.

Return Value

Dispatcher

at line 67
static void bootHasPermissions()

Boot permission cleanup and queued assignment handling.

Return Value

void

at line 122
static protected array|null deleteSubjectAssignments(Model $model, string $table)

Delete one kind of assignment for a hard-deleted subject.

Parameters

Model $model
string $table

Return Value

array|null

at line 213
static protected void deletePermissionRecordAssignments(Model $model, string $modelAssignmentsTable, string $pivotKey)

Delete assignment pivots owned by a Role or Permission record.

Parameters

Model $model
string $modelAssignmentsTable
string $pivotKey

Return Value

void

at line 263
string getPermissionClass()

Get the permission model class.

Return Value

string

at line 275
string getWildcardClass()

Get the wildcard permission class.

Return Value

string

at line 297
BelongsToMany permissions()

A model may have multiple direct permissions.

Return Value

BelongsToMany

at line 305
protected BelongsToMany permissionAssignmentRelation(PermissionRelationContext|null $context = null)

Build the direct permission assignment relation for a captured context.

Parameters

PermissionRelationContext|null $context

Return Value

BelongsToMany

at line 325
protected Collection getCachedDirectPermissions()

Get cached direct permission assignments for this model.

Return Value

Collection

at line 399
protected Collection allowedDirectPermissions()

Return allowed direct permissions.

Return Value

Collection

at line 411
Builder scopePermission(Builder $query, array|Collection|int|Permission|string|UnitEnum $permissions, bool $without = false)

Scope the model query to certain permissions only.

Parameters

Builder $query
array|Collection|int|Permission|string|UnitEnum $permissions
bool $without

Return Value

Builder

at line 431
protected Builder whereEffectivePermission(Builder $query, array $permissionIds)

Add an effective permission predicate for the given permission ids.

Parameters

Builder $query
array $permissionIds

Return Value

Builder

at line 456
protected Builder wherePermissionEffect(Builder $query, int|string $permissionId, bool $denied)

Add a permission-effect predicate for direct and role-granted permissions.

Parameters

Builder $query
int|string $permissionId
bool $denied

Return Value

Builder

at line 476
protected Builder whereDirectPermissionEffect(Builder $query, int|string $permissionId, bool $denied)

Add a direct permission-effect predicate.

Parameters

Builder $query
int|string $permissionId
bool $denied

Return Value

Builder

at line 491
protected Builder whereRolePermissionEffect(Builder $query, int|string $permissionId, bool $denied)

Add a role permission-effect predicate.

Parameters

Builder $query
int|string $permissionId
bool $denied

Return Value

Builder

at line 506
Builder scopeWithoutPermission(Builder $query, array|Collection|int|Permission|string|UnitEnum $permissions)

Scope the model query to only those without certain permissions, whether indirectly by role or by direct permission.

Parameters

Builder $query
array|Collection|int|Permission|string|UnitEnum $permissions

Return Value

Builder

at line 516
protected array convertToPermissionModels(array|Collection|int|Permission|string|UnitEnum $permissions)

No description

Parameters

array|Collection|int|Permission|string|UnitEnum $permissions

Return Value

array

Exceptions

PermissionDoesNotExist

at line 549
Permission filterPermission(int|Permission|string|UnitEnum $permission, string|null $guardName = null)

Find a permission.

Parameters

int|Permission|string|UnitEnum $permission
string|null $guardName

Return Value

Permission

Exceptions

PermissionDoesNotExist

at line 586
bool hasPermissionTo(int|Permission|string|UnitEnum $permission, string|null $guardName = null)

Determine if the model may perform the given permission.

Parameters

int|Permission|string|UnitEnum $permission
string|null $guardName

Return Value

bool

Exceptions

PermissionDoesNotExist

at line 618
protected bool hasWildcardPermission(int|Permission|string|UnitEnum $permission, string|null $guardName = null)

Validates a wildcard permission against all permissions of a user.

Parameters

int|Permission|string|UnitEnum $permission
string|null $guardName

Return Value

bool

at line 649
bool checkPermissionTo(int|Permission|string|UnitEnum $permission, string|null $guardName = null)

An alias to hasPermissionTo(), but avoids throwing an exception.

Parameters

int|Permission|string|UnitEnum $permission
string|null $guardName

Return Value

bool

at line 663
bool hasAnyPermission(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Determine if the model has any of the given permissions.

Parameters

array|Collection|int|Permission|string|UnitEnum ...$permissions

Return Value

bool

at line 681
bool hasAllPermissions(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Determine if the model has all of the given permissions.

Parameters

array|Collection|int|Permission|string|UnitEnum ...$permissions

Return Value

bool

at line 697
protected bool hasPermissionViaRole(Permission $permission)

Determine if the model has, via roles, the given permission.

Parameters

Permission $permission

Return Value

bool

at line 720
bool hasDirectPermission(int|Permission|string|UnitEnum $permission)

Determine if the model has the given permission.

Parameters

int|Permission|string|UnitEnum $permission

Return Value

bool

Exceptions

PermissionDoesNotExist

at line 734
Collection getPermissionsViaRoles()

Return all the permissions the model has via roles.

Return Value

Collection

at line 749
Collection getAllPermissions()

Return all the permissions the model has, both directly and via roles.

Return Value

Collection

at line 800
HasPermissions givePermissionTo(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Grant the given permission(s) to the model.

Parameters

array|Collection|int|Permission|string|UnitEnum ...$permissions

Return Value

HasPermissions

at line 810
HasPermissions denyPermissionTo(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Deny the given permission(s) for the model.

Parameters

array|Collection|int|Permission|string|UnitEnum ...$permissions

Return Value

HasPermissions

at line 898
protected string assignmentIdIdentity(int|string $id)

Build a collision-safe assignment ID identity.

Parameters

int|string $id

Return Value

string

at line 909
protected array indexAssignmentIds(array $ids)

Index assignment IDs by their collision-safe identities.

Parameters

array $ids

Return Value

array

at line 923
protected int|string normalizeRelatedPivotId(BelongsToMany $relation, mixed $id)

Normalize an ID read directly from an assignment pivot.

Parameters

BelongsToMany $relation
mixed $id

Return Value

int|string

at line 936
protected Collection readCurrentAssignmentPivots(BelongsToMany $relation, array $columns, array|null $ids = null)

Read current assignment pivots through their captured relation constraints.

Parameters

BelongsToMany $relation
array $columns
array|null $ids

Return Value

Collection

at line 1091
protected void attachPermissionAssignments(array $permissions, array $pivot, PermissionRelationContext|null $context = null)

Insert permission assignments into an empty assignment set.

Parameters

array $permissions
array $pivot
PermissionRelationContext|null $context

Return Value

void

at line 1112
protected void queuePermissionAssignments(array $permissions, array $pivot, PermissionRelationContext $context)

Queue permission assignments until the model is saved.

Parameters

array $permissions
array $pivot
PermissionRelationContext $context

Return Value

void

at line 1185
protected bool removeQueuedPermissionAssignments(array $permissions, PermissionRelationContext $context)

Remove permission assignments queued for a captured context.

Parameters

array $permissions
PermissionRelationContext $context

Return Value

bool

at line 1227
protected void flushQueuedPermissionAssignments()

Flush permission assignments queued before the model was saved.

Return Value

void

at line 1249
protected void attachQueuedPermissionAssignmentBatches(array $assignments)

Attach collapsed queued permission assignment batches.

Parameters

array $assignments

Return Value

void

at line 1263
protected void clearQueuedPermissionAssignments()

Clear queued permission assignments after their transaction commits.

Return Value

void

at line 1273
protected void invalidateQueuedPermissionAssignmentContexts(array $assignments)

Invalidate the captured contexts of committed permission assignments.

Parameters

array $assignments

Return Value

void

at line 1300
protected array collapseQueuedPermissionAssignments()

Collapse queued permission assignments to their final edge state.

Return Value

array

at line 1342
protected void dispatchPermissionAttachedEvent(array $permissions)

Dispatch the permission attached event when enabled and listened for.

Parameters

array $permissions

Return Value

void

at line 1354
protected bool permissionAttachedEventIsListenedFor()

Determine whether the permission attached event has listeners.

Return Value

bool

at line 1363
void forgetWildcardPermissionIndex()

Forget the wildcard permission index.

Return Value

void

at line 1375
HasPermissions syncPermissions(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Remove all current permissions and set the given ones.

Parameters

array|Collection|int|Permission|string|UnitEnum ...$permissions

Return Value

HasPermissions

at line 1440
array syncPermissionEffects(array|Collection $allowed = [], array|Collection $denied = [])

Remove all current permissions and set allowed and denied permissions.

For unsaved models, assignments are queued until the model is saved and the returned change set is empty because no database rows are changed yet.

Parameters

array|Collection $allowed
array|Collection $denied

Return Value

array

at line 1513
HasPermissions revokePermissionTo(Permission|Permission[]|string|string[]|UnitEnum $permission)

Revoke the given permission(s).

Parameters

Permission|Permission[]|string|string[]|UnitEnum $permission

Return Value

HasPermissions

at line 1558
protected void dispatchPermissionDetachedEvent(mixed $permission)

Dispatch the permission detached event when enabled and listened for.

Parameters

mixed $permission

Return Value

void

at line 1570
protected bool permissionDetachedEventIsListenedFor()

Determine whether the permission detached event has listeners.

Return Value

bool

at line 1581
bool hasDeniedPermission(int|Permission|string|UnitEnum $permission, string|null $guardName = null)

Determine if the model has an explicit denied direct permission.

Parameters

int|Permission|string|UnitEnum $permission
string|null $guardName

Return Value

bool

at line 1597
bool hasDeniedPermissionViaRoles(int|Permission|string|UnitEnum $permission, string|null $guardName = null)

Determine if the model has an explicit denied permission via roles.

Parameters

int|Permission|string|UnitEnum $permission
string|null $guardName

Return Value

bool

at line 1634
protected Collection getPermissionsViaRolesWithPivots()

Return permissions granted through the model's roles with role-permission pivot data.

Return Value

Collection

at line 1653
protected Collection loadPermissionsViaRolesWithPivots()

Load permissions granted through the model's roles with role-permission pivot data.

Return Value

Collection

at line 1679
protected Model|null permissionForMatch(mixed $permission, string $guardName)

Resolve a permission for matching without throwing.

Parameters

mixed $permission
string $guardName

Return Value

Model|null

at line 1711
protected array deniedPermissionKeys(Collection ...$permissionCollections)

Build lookup keys for denied permissions.

Parameters

Collection ...$permissionCollections

Return Value

array

at line 1729
protected string permissionComparisonKey(Model $permission)

Build a permission comparison key.

Parameters

Model $permission

Return Value

string

at line 1737
protected Model permissionWithRolePivot(Model $permission, Model $role)

Clone a permission with the matching role-permission pivot.

Parameters

Model $permission
Model $role

Return Value

Model

at line 1748
protected bool pivotIsDenied(Model $model)

Determine if a hydrated pivot marks the permission as denied.

Parameters

Model $model

Return Value

bool

at line 1763
protected bool permissionEffectIsDenied(mixed $value)

Normalize a permission assignment effect.

Parameters

mixed $value

Return Value

bool

at line 1772
protected Collection relationCollection(Model $model, string $relation)

Get a hydrated relation collection.

Parameters

Model $model
string $relation

Return Value

Collection

at line 1793
protected bool storedPermissionMatches(Model $storedPermission, mixed $permission, string|null $guardName = null)

Determine if a stored permission matches an input permission.

Parameters

Model $storedPermission
mixed $permission
string|null $guardName

Return Value

bool

at line 1816
protected string guardNameForPermissionMatch(mixed $permission, string|null $guardName = null)

Resolve the guard to use when matching stored permissions.

Parameters

mixed $permission
string|null $guardName

Return Value

string

at line 1843
Collection getPermissionNames()

Get the permission names.

Return Value

Collection

at line 1852
protected Collection|Permission|Permission[] getStoredPermission(array|Collection|int|Permission|string|UnitEnum $permissions, PermissionPartition|null $partition = null)

No description

Parameters

array|Collection|int|Permission|string|UnitEnum $permissions
PermissionPartition|null $partition

Return Value

Collection|Permission|Permission[]

at line 1940
protected void ensureModelSharesGuard(Permission|Role $roleOrPermission)

No description

Parameters

Permission|Role $roleOrPermission

Return Value

void

Exceptions

GuardDoesNotMatch

at line 1950
protected Collection getGuardNames()

Get the guard names for the model.

Return Value

Collection

at line 1958
protected string getDefaultGuardName()

Get the default guard name for the model.

Return Value

string

at line 1966
void forgetCachedPermissions()

Forget the cached permissions.

Return Value

void

at line 1976
bool hasAllDirectPermissions(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Check if the model has All of the requested Direct permissions.

Parameters

array|Collection|int|Permission|string|UnitEnum ...$permissions

Return Value

bool

at line 1994
bool hasAnyDirectPermission(array|Collection|int|Permission|string|UnitEnum ...$permissions)

Check if the model has Any of the requested Direct permissions.

Parameters

array|Collection|int|Permission|string|UnitEnum ...$permissions

Return Value

bool