putheng / role
A role and permission package for Laravel
Requires
- php: >=7.0
- illuminate/database: >= 5.0
- illuminate/support: >= 5.0
Requires (Dev)
- orchestra/testbench: ~3.7
- phpunit/phpunit: ~7.0
This package is auto-updated.
Last update: 2025-05-29 01:07:40 UTC
README
Require this package with composer.
composer require putheng/role
Laravel 5.5 uses Package Auto-Discovery, so doesn't require you to manually add the ServiceProvider.
Setting up from scratch
Laravel 5.5+:
If you don't use auto-discovery, add the ServiceProvider to the providers array in config/app.php
Putheng\Role\RoleServiceProvider::class,
The schema
For Laravel 5 migration
php artisan migrate
The model
Your model should use Putheng\Role\Traits\HasPermissionsTrait
trait to User model:
use Putheng\Role\Traits\HasPermissionsTrait; class User extends Model { use HasPermissionsTrait; }
Add to AppServiceProvider
on boot
method for Bootstrap services.
use Putheng\Role\Models\Permission; Permission::get()->map(function($permission){ Gate::define($permission->name, function($user) use ($permission){ return $user->hasPermissionTo($permission); }); });
Middleware
Add RoleMiddleware
to $routeMiddleware
in App\Http\Kernel
class
'role' => \Putheng\Role\RoleMiddleware::class,
Router
Route::group(['middleware' => 'role:admin'], function () { Route::group(['middleware' => 'role:admin,delete users'], function () { Route::get('/admin/users', function () { return 'Delete users in admin panel'; }); }); Route::get('/admin', function () { return 'Admin panel'; }); });
Usage
Check is user has roles
$user = User::find(1); // multiple argument $user->hasRole('admin', 'user'); // true or false
Give role to
$user = User::find(1); // multiple argument $user->giveRoleTo('admin', 'user'); // true or false
Refresh role
$user = User::find(1); // multiple argument $user->refreshRoles('admin', 'user'); // true or false
Check is user has permission or permission through role
$user = User::find(1); $user->hasPermissionTo('edit posts', 'delete posts'); // true or false // Use Laravel Gate can method $user->can('edit posts');
Give permissions
$user = User::find(1); $user->givePermissionTo(['edit posts', 'delete posts']);
Revoke permissions
$user = User::find(1); $user->withdrawPermissionTo(['edit posts']);
Refresh permissions remove all user's permissions and re-give the permissions
$user = User::find(1); $user->refreshPermissions(['edit posts']);
Custom blade what we output inside template Role
@role('admin') <a href="#">Admin panel</a> @endrole
Permission
@permission('edit post') <a href="#">Edit post</a> @endpermission