##Best Practice
INSTEAD OF DIRECT PERMISSIONS, it is better to assign permissions to Roles, and then assign Roles to Users.
See the Roles vs Permissions section of the docs for a deeper explanation.
HOWEVER, If you have reason to directly assign individual permissions to specific users (instead of to roles which are assigned to those users), you can do that as well:
##Direct Permissions to Users
##Giving/Revoking direct permissions
A permission can be given to any user:
$user->givePermissionTo('edit articles');
$user->givePermissionTo('edit articles', 'delete articles');
$user->givePermissionTo(['edit articles', 'delete articles']);
A permission can be revoked from a user:
$user->revokePermissionTo('edit articles');
Or revoke & add new permissions in one go:
$user->syncPermissions(['edit articles', 'delete articles']);
##Checking Direct Permissions
Like all permissions assigned via roles, you can check if a user has a permission by using Laravel's default can
function. This will also allow you to use Super-Admin features provided by Laravel's Gate:
$user->can('edit articles');
NOTE: The following hasPermissionTo
, hasAnyPermission
, hasAllPermissions
functions do not support Super-Admin functionality. Use can
, canAny
, canAll
instead.
You can check if a user has a permission:
$user->hasPermissionTo('edit articles');
Or you may pass an integer representing the permission id
$user->hasPermissionTo('1');
$user->hasPermissionTo(Permission::find(1)->id);
$user->hasPermissionTo($somePermission->id);
You can check if a user has Any of an array of permissions:
$user->hasAnyPermission(['edit articles', 'publish articles', 'unpublish articles']);
...or if a user has All of an array of permissions:
$user->hasAllPermissions(['edit articles', 'publish articles', 'unpublish articles']);
You may also pass integers to lookup by permission id
$user->hasAnyPermission(['edit articles', 1, 5]);