Roles and Permissions
, (*1)
Installation
For you can install this package. You should to follow the next steps., (*2)
Composer
For a installation package you can use the composer command, (*3)
composer require yasser/laravel-roles
or you can pull this package in through Composer file, (*4)
{
"require": {
...
"yasser/laravel-roles": "^0.1.2"
}
}
Service Provider
Add the package to your application service providers in config/app.php
file., (*5)
'providers' => [
...
/*
* Package Service Providers...
*/
Yasser\Roles\RolesServiceProvider::class,
/*
* Application Service Providers...
*/
...
],
Migrations
Excecute this command in your console to add migrations files to a project, (*6)
php artisan vendor:publish --provider="Yasser\Roles\RolesServiceProvider" --tag=migrations
and also run the migrations, (*7)
php aritsan migrate
User trait
Include HasRolesRelations
trait inside your User
model., (*8)
use Yasser\Roles\Traits\HasRolesRelations;
class User extends Authenticatable
{
use Notifiable, HasRolesRelations;
}
Middleware
Add the middleware VerifyPermission
into app/Http/kernel.php file., (*9)
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
...
'verify' => \Yasser\Roles\Middlewares\VerifyPermission::class,
'check' => \Yasser\Roles\Middlewares\VerifyRole::class,
],
Usage
Create Permissions
use Yasser\Roles\Models\Permission;
$permission = Permission::create([
'name' => 'Create Users',
'slug' => 'user.create',
'description' => '', //optional
'model' => '' //optional
]);
Create Roles
use Yasser\Roles\Models\Role;
$adminRole = Role::create([
'name' => 'Admin',
'slug' => 'admin',
'description' => ''//optional
]);
Attach and Detach Permissions to a role
You can attach one permition to a role, (*10)
$createPermission = Permission::create([
'name' => 'Create Users',
'slug' => 'user.create',
'description' => '', //optional
'model' => '' //optional
]);
$role = Role::create([
'name' => 'Admin',
'slug' => 'admin',
]);
$role->attachPermission($createPermission);
or you can attach many permitions to a role, (*11)
$createPermission = Permission::create([
'name' => 'Create Users',
'slug' => 'user.create'
]);
$deletePermission = Permission::create([
'name' => 'Delete user',
'slug' => 'user.delete'
]);
$role = Role::create([
'name' => 'Admin',
'slug' => 'admin',
]);
$role->attachPermissions([$createPermission, $deletePermission]);
Detach a one permission from a role, (*12)
$role->detachPermission($createRole);
or you can detach many permissions from a role, (*13)
$role->detachPermissions([$createPermission, $deletePermission])
Attach and Detach Role to a user
Attach a Role to a user, (*14)
$role = Role::create([
'name' => 'Admin',
'slug' => 'admin',
]);
$user->attachRole($role)
Attach many roles to a user, (*15)
$adminRole = Role::create([
'name' => 'Admin',
'slug' => 'admin',
]);
$operatorRole = Role::create([
'name' => 'Operator',
'slug' => 'operator',
]);
$user->attachRoles([$adminRole, $operatorRole]);
Detach a role from a user, (*16)
$user->detachRole($role)
Detach many roles from a user, (*17)
$user->detachRoles([$adminRole, $operatorRole])
Check if a user has a role
$adminRole = Role::create([
'name' => 'Admin',
'slug' => 'admin',
]);
$user->checkRole('admin'); //return true or false
Check if a user has a permission
$createPermission = Permission::create([
'name' => 'Create Users',
'slug' => 'user.create'
]);
$user->canDo('user.create');
Blade directives
$role = Role::create([
'name' => 'Admin',
'slug' => 'admin',
]);
@checkRole('admin')
...
@endCheckRole
$createPermission = Permission::create([
'name' => 'Create Users',
'slug' => 'user.create'
]);
@canDo('user.create')
<a href="/users/create">Create a user</a>
@endCanDo
Middleware functions
$role = Role::create([
'name' => 'Admin',
'slug' => 'admin',
]);
Route::get('user/create', ...)->middleware('ckeck:admin');
$createPermission = Permission::create([
'name' => 'Create Users',
'slug' => 'user.create'
]);
Route::get('/user/create', ... )->middleware('verify:user.create');