HasPermissions
trait HasPermissions
Traits
Build Permission relations from one immutable partition and team snapshot.
Methods
Build a partition-aware belongs-to-many relation.
Build a partition-aware morph-to-many relation.
Build the related query using the relation's captured partition.
Ensure a partition-bearing relation parent belongs to the captured partition.
Apply the captured partition to pivot reads and writes.
Get the permission registrar.
Get the event dispatcher.
Boot permission cleanup and queued assignment handling.
Delete the model and its permission assignments atomically.
Determine whether deleting the model removes permission assignments.
Delete one kind of assignment for a hard-deleted subject.
Delete assignment pivots owned by a Role or Permission record.
Resolve and validate a permission record's deletion partition.
Get the permission model class.
Get the wildcard permission class.
A model may have multiple direct permissions.
Build the direct permission assignment relation for a captured context.
Get the immutable context captured by a permission assignment relation.
Forget an assignment relation loaded for an earlier context.
Get cached direct permission assignments for this model.
Get direct permissions for a model-returning public API.
Return allowed direct permissions.
Scope the model query to certain permissions only.
Add an effective permission predicate for the given permission ids.
Add a permission-effect predicate for direct and role-granted permissions.
Add a direct permission-effect predicate.
Add a role permission-effect predicate.
Scope the model query to only those without certain permissions, whether indirectly by role or by direct permission.
Convert the given permissions to permission models.
Find a permission.
Determine if the model may perform the given permission.
Validates a wildcard permission against all permissions of a user.
An alias to hasPermissionTo(), but avoids throwing an exception.
Determine if the model has any of the given permissions.
Determine if the model has all of the given permissions.
Determine if the model has, via roles, the given permission.
Determine if the model has the given permission.
Return all the permissions the model has via roles.
Return all the permissions the model has, both directly and via roles.
Return all the permissions the model is denied, both directly and via roles.
Grant the given permission(s) to the model.
Deny the given permission(s) for the model.
Build a collision-safe assignment ID identity.
Index assignment IDs by their collision-safe identities.
Normalize an ID read directly from an assignment pivot.
Read current assignment pivots through their captured relation constraints.
Queue permission assignments until the model is saved.
Remove permission assignments queued for a captured context.
Flush permission assignments queued before the model was saved.
Insert queued permission assignments, with one insert per context and effect.
Dispatch the permission attached event when enabled and listened for.
Determine whether the permission attached event has listeners.
Forget the wildcard permission index.
Remove all current permissions and set the given ones.
Remove all current permissions and set allowed and denied permissions.
Revoke the given permission(s).
Dispatch the permission detached event when enabled and listened for.
Determine whether the permission detached event has listeners.
Determine if the model has an explicit denied direct permission.
Determine if the model has an explicit denied permission via roles.
Return permissions granted through the model's roles with role-permission pivot data.
Load permissions granted through the model's roles with role-permission pivot data.
Resolve a permission for matching without throwing.
Build lookup keys for denied permissions.
Clone a permission with the matching role-permission pivot.
Normalize a permission assignment effect.
Determine if a stored permission matches an input permission.
Resolve the guard to use when matching stored permissions.
Get the permission names.
Get the stored permission models for the given permissions.
Ensure the given role or permission uses one of the model's guards.
Get the guard names for the model.
Get the default guard name for the model.
Forget the cached permissions.
Check if the model has All of the requested Direct permissions.
Check if the model has Any of the requested Direct permissions.
Details
in
BuildsPermissionRelations at line 35
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.
in
BuildsPermissionRelations at line 72
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.
in
BuildsPermissionRelations at line 129
protected Builder
permissionRelationQuery(Model $related, PermissionPartition|null $partition)
Build the related query using the relation's captured partition.
in
BuildsPermissionRelations at line 144
protected void
ensurePermissionRelationParentMatches(PermissionRegistrar $registrar, PermissionPartition|null $partition)
Ensure a partition-bearing relation parent belongs to the captured partition.
in
BuildsPermissionRelations at line 178
protected BelongsToMany
applyPermissionPartitionToRelation(BelongsToMany $relation, PermissionPartition|null $partition)
Apply the captured partition to pivot reads and writes.
at line 54
protected PermissionRegistrar
permissionRegistrar()
Get the permission registrar.
at line 62
protected Dispatcher
eventDispatcher()
Get the event dispatcher.
at line 70
static void
bootHasPermissions()
Boot permission cleanup and queued assignment handling.
at line 169
int|bool|null
delete()
Delete the model and its permission assignments atomically.
at line 183
static protected bool
shouldDeletePermissionAssignments(Model $model)
Determine whether deleting the model removes permission assignments.
at line 193
static protected array|null
deleteSubjectAssignments(string $morphType, mixed $modelKey, string $table)
Delete one kind of assignment for a hard-deleted subject.
at line 249
static protected void
deletePermissionRecordAssignments(mixed $modelKey, string $modelAssignmentsTable, string $pivotKey, PermissionPartition|null $partition)
Delete assignment pivots owned by a Role or Permission record.
at line 276
static protected PermissionPartition|null
permissionRecordDeletionPartition(Model $model, PermissionRegistrar $registrar)
Resolve and validate a permission record's deletion partition.
at line 306
string
getPermissionClass()
Get the permission model class.
at line 318
string
getWildcardClass()
Get the wildcard permission class.
at line 340
BelongsToMany
permissions()
A model may have multiple direct permissions.
at line 348
protected BelongsToMany
permissionAssignmentRelation(PermissionRelationContext|null $context = null)
Build the direct permission assignment relation for a captured context.
at line 368
protected PermissionRelationContext
permissionRelationContext(BelongsToMany $relation)
Get the immutable context captured by a permission assignment relation.
at line 377
protected void
forgetStalePermissionRelation(PermissionRegistrar $registrar, string $relation)
Forget an assignment relation loaded for an earlier context.
at line 388
protected Collection
getCachedDirectPermissions()
Get cached direct permission assignments for this model.
at line 482
protected Collection
directPermissionsForModelResult()
Get direct permissions for a model-returning public API.
at line 500
protected Collection
allowedDirectPermissions()
Return allowed direct permissions.
at line 514
Builder
scopePermission(Builder $query, array|Collection|int|Permission|string|UnitEnum $permissions, bool $without = false)
Scope the model query to certain permissions only.
at line 539
protected Builder
whereEffectivePermission(Builder $query, array $permissionIds)
Add an effective permission predicate for the given permission ids.
at line 564
protected Builder
wherePermissionEffect(Builder $query, int|string $permissionId, bool $denied)
Add a permission-effect predicate for direct and role-granted permissions.
at line 584
protected Builder
whereDirectPermissionEffect(Builder $query, int|string $permissionId, bool $denied)
Add a direct permission-effect predicate.
at line 599
protected Builder
whereRolePermissionEffect(Builder $query, int|string $permissionId, bool $denied)
Add a role permission-effect predicate.
at line 616
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.
at line 626
protected array
convertToPermissionModels(array|Collection|int|Permission|string|UnitEnum $permissions)
Convert the given permissions to permission models.
at line 659
Permission
filterPermission(mixed $permission, string|null $guardName = null)
Find a permission.
at line 696
bool
hasPermissionTo(mixed $permission, string|null $guardName = null)
Determine if the model may perform the given permission.
at line 720
protected bool
hasWildcardPermission(mixed $permission, string|null $guardName = null)
Validates a wildcard permission against all permissions of a user.
at line 757
bool
checkPermissionTo(mixed $permission, string|null $guardName = null)
An alias to hasPermissionTo(), but avoids throwing an exception.
at line 771
bool
hasAnyPermission(mixed ...$permissions)
Determine if the model has any of the given permissions.
at line 789
bool
hasAllPermissions(mixed ...$permissions)
Determine if the model has all of the given permissions.
at line 805
protected bool
hasPermissionViaRole(Permission $permission)
Determine if the model has, via roles, the given permission.
at line 825
bool
hasDirectPermission(mixed $permission)
Determine if the model has the given permission.
at line 838
Collection
getPermissionsViaRoles()
Return all the permissions the model has via roles.
at line 853
Collection
getAllPermissions()
Return all the permissions the model has, both directly and via roles.
at line 872
Collection
getDeniedPermissions()
Return all the permissions the model is denied, both directly and via roles.
at line 931
HasPermissions
givePermissionTo(array|Collection|int|Permission|string|UnitEnum|null ...$permissions)
Grant the given permission(s) to the model.
at line 939
HasPermissions
denyPermissionTo(array|Collection|int|Permission|string|UnitEnum|null ...$permissions)
Deny the given permission(s) for the model.
at line 1044
protected string
assignmentIdIdentity(int|string $id)
Build a collision-safe assignment ID identity.
at line 1055
protected array
indexAssignmentIds(array $ids)
Index assignment IDs by their collision-safe identities.
at line 1069
protected int|string
normalizeRelatedPivotId(BelongsToMany $relation, mixed $id)
Normalize an ID read directly from an assignment pivot.
at line 1082
protected Collection
readCurrentAssignmentPivots(BelongsToMany $relation, array $columns, array|null $ids = null)
Read current assignment pivots through their captured relation constraints.
at line 1250
protected void
queuePermissionAssignments(array $permissions, bool $isDenied, PermissionRelationContext $context, string $pivotClass)
Queue permission assignments until the model is saved.
Queuing a permission again replaces its queued effect.
at line 1299
protected void
removeQueuedPermissionAssignments(array $permissions, PermissionRelationContext $context)
Remove permission assignments queued for a captured context.
at line 1321
protected void
flushQueuedPermissionAssignments()
Flush permission assignments queued before the model was saved.
at line 1348
protected void
attachQueuedPermissionAssignments(array $assignments)
Insert queued permission assignments, with one insert per context and effect.
at line 1396
protected void
dispatchPermissionAttachedEvent(array $permissions)
Dispatch the permission attached event when enabled and listened for.
at line 1408
protected bool
permissionAttachedEventIsListenedFor()
Determine whether the permission attached event has listeners.
at line 1417
void
forgetWildcardPermissionIndex()
Forget the wildcard permission index.
at line 1427
HasPermissions
syncPermissions(array|Collection|int|Permission|string|UnitEnum|null ...$permissions)
Remove all current permissions and set the given ones.
at line 1444
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.
at line 1505
HasPermissions
revokePermissionTo(array|Collection|int|Permission|string|UnitEnum $permission)
Revoke the given permission(s).
at line 1543
protected void
dispatchPermissionDetachedEvent(mixed $permission)
Dispatch the permission detached event when enabled and listened for.
at line 1555
protected bool
permissionDetachedEventIsListenedFor()
Determine whether the permission detached event has listeners.
at line 1564
bool
hasDeniedPermission(int|Permission|string|UnitEnum $permission, string|null $guardName = null)
Determine if the model has an explicit denied direct permission.
at line 1578
bool
hasDeniedPermissionViaRoles(int|Permission|string|UnitEnum $permission, string|null $guardName = null)
Determine if the model has an explicit denied permission via roles.
at line 1615
protected Collection
getPermissionsViaRolesWithPivots()
Return permissions granted through the model's roles with role-permission pivot data.
at line 1634
protected Collection
loadPermissionsViaRolesWithPivots()
Load permissions granted through the model's roles with role-permission pivot data.
at line 1665
protected Model|null
permissionForMatch(int|Permission|string|UnitEnum $permission, string $guardName)
Resolve a permission for matching without throwing.
at line 1692
protected array
deniedPermissionKeys(Collection ...$permissionCollections)
Build lookup keys for denied permissions.
at line 1710
protected string
permissionComparisonKey(Model $permission)
Build a permission comparison key.
at line 1718
protected Model
permissionWithRolePivot(Model $permission, Model $role, PermissionRegistrar $registrar)
Clone a permission with the matching role-permission pivot.
at line 1741
protected bool
pivotIsDenied(Model $model)
Determine if a hydrated pivot marks the permission as denied.
at line 1750
protected bool
permissionEffectIsDenied(mixed $value)
Normalize a permission assignment effect.
at line 1759
protected Collection
relationCollection(Model $model, string $relation)
Get a hydrated relation collection.
at line 1778
protected bool
storedPermissionMatches(Model $storedPermission, int|Permission|string|UnitEnum $permission, string|null $guardName = null)
Determine if a stored permission matches an input permission.
at line 1803
protected string
guardNameForPermissionMatch(int|Permission|string|UnitEnum $permission, string|null $guardName = null)
Resolve the guard to use when matching stored permissions.
at line 1830
Collection
getPermissionNames()
Get the permission names.
at line 1841
protected mixed
getStoredPermission(mixed $permissions, PermissionPartition|null $partition = null)
Get the stored permission models for the given permissions.
at line 1931
protected void
ensureModelSharesGuard(Permission|Role $roleOrPermission)
Ensure the given role or permission uses one of the model's guards.
at line 1941
protected Collection
getGuardNames()
Get the guard names for the model.
at line 1949
protected string
getDefaultGuardName()
Get the default guard name for the model.
at line 1957
void
forgetCachedPermissions()
Forget the cached permissions.
at line 1967
bool
hasAllDirectPermissions(mixed ...$permissions)
Check if the model has All of the requested Direct permissions.
at line 1985
bool
hasAnyDirectPermission(mixed ...$permissions)
Check if the model has Any of the requested Direct permissions.