This is a Laravel package that allows you to manage roles and permissions in any Laravel project with minimal database queries and a small number of loaded models. It is a highly optimized package
install via composer
composer require bdmehedi/laravel-permission
The service provider will be registered automatically. If you want, you may add it manually.
'providers' => [
// ...
BdMehedi\LaravelPermission\LaravelPermissionServiceProvider::class,
];
Publish the migrations and edit as your need
php artisan vendor:publish --tag=laravel_permission_migration
Run the migrations. After publishing the migrations and configuring them as your need you have to create database tables by running the command bellow:
php artisan migrate
use HasPermissions
Create Role and Permission
use BdMehedi\LaravelPermission\Models\Permission;
use BdMehedi\LaravelPermission\Models\Role;
$role = Role::create(['role' => 'admin']);
$permission = Permission::create(['name' => 'create-user', 'group' => 'user']); //the group is optional
$user->assignRole('admin');
$user->givePermissionTo('create-user');
//or your can assign permissions by providing an array
$user->assignRole(['admin', 'user']);
$user->givePermissionTo(['create-user']);
// Single permission or role
$user->revokeRole('admin');
$user->withdrawPermissionTo('create-user');
// Or array of permissions or roles
$user->revokeRole(['admin']);
$user->withdrawPermissionTo(['create-user']);
$role->givePermissionTo('create-user');
//or an array or permissions
$role->givePermissionTo(['create-user']);
$role->withdrawPermissionTo('create-user');
//or array or permissions
$role->givePermissionTo(['create-user']);
You can check a user's permission with Laravel's default can function.
$user->can('create-user');
Or you can check with hasPermissionTo
$user->hasPermissionTo('create-user');
$user->hasRole('admin');
// or check at least one role from an array of roles:
$user->hasRole(['admin', 'user']);
You can use the laravel default middleware can provided by \Illuminate\Auth\Middleware\Authorize::class
Route::middleware('can:create-user')->group(function () {
});
If you can check at least one premission of many you can use the allow
middleware
Route::middleware('allow:create|view|delete')->group(function () {
});
if you have another guard you can user
Route::middleware('allow:create|view|delete,guardName')->group(function () {
});
This is still in beta, though I have confidence that it will work as expected. You can contribute by reporting bugs, fixing bugs, reviewing pull requests, and more ways. Go to the issues section, and you can start working on an issue immediately. If you want to add or fix something, open a pull request.