pavelmgn / laravel-rbac
Laravel 5+ 的基于角色的访问控制
0.3
2021-07-10 14:33 UTC
Requires
- php: >=5.5.9
- illuminate/support: >=5.4
This package is auto-updated.
Last update: 2024-09-25 13:26:11 UTC
README
用于 Laravel 5.4+ 的超级简单的 RBAC/ACL 实现。
安装
使用以下命令通过 composer 安装此包 (Packagist)
composer require pavelmgn/laravel-rbac
或者修改你的 composer.json
"require": {
...
"pavelmgn/laravel-rbac": "^0.3"
}
然后运行 composer update
。
安装后,将 ServiceProvider 注册到 config/app.php
文件中的 providers
数组中
Pavelmgn\LaravelRbac\RbacServiceProvider::class,
发布迁移文件
$ php artisan vendor:publish --provider="Pavelmgn\LaravelRbac\RbacServiceProvider" --force
运行迁移
$ php artisan migrate
将 RBAC 中间件添加到你的 app/Http/Kernel.php
protected $routeMiddleware = [ ... 'rbac' => '\Pavelmgn\LaravelRbac\Middleware\Rbac::class' ];
将 Rbac 特性添加到你的 User
模型中
use Pavelmgn\LaravelRbac\Traits\Rbac; class User extends Authenticatable { use Rbac; ... }
用法
角色
创建角色
$adminRole = new Role; $adminRole->name = 'Administrator'; $adminRole->slug = 'administrator'; $adminRole->description = 'System Administrator'; $adminRole->save(); $editorRole = new Role; $editorRole->name = 'Editor'; $editorRole->slug = 'editor'; $editorRole->description = 'Editor'; $editorRole->save();
将角色分配给用户
$user = User::find(1); $user->roles()->attach($adminRole->id);
你也可以一次性分配多个角色
$user->roles()->attach([$adminRole->id, $editorRole->id]);
从用户撤销角色
$user->roles()->detach($adminRole->id);
你也可以一次性撤销多个角色
$user->roles()->detach([$adminRole->id, $editorRole->id]);
同步角色
$user->roles()->sync([$editorRole->id]);
如果你不在同步方法中传递角色的 id,则将撤销已分配给用户的任何角色。
权限
创建权限
$createUser = new Permission; $createUser->name = 'Create user'; $createUser->slug = 'user.create'; $createUser->description = 'Permission to create user'; $createUser->save(); $updateUser = new Permission; $updateUser->name = 'Update user'; $updateUser->slug = 'user.update'; $updateUser->description = 'Permission to update user'; $updateUser->save();
将权限分配给角色
$adminRole = Role::find(1); $adminRole->permissions()->attach($createUser->id);
你也可以一次性分配多个权限
$adminRole->permissions()->attach([$createUser->id, $updateUser->id]);
从角色撤销权限
$adminRole->permissions()->detach($createUser->id);
你也可以一次性撤销多个权限
$adminRole->permissions()->detach([$createUser->id, $updateUser->id]);
同步权限
$adminRole->permissions()->sync([$updateUser->id]);
如果你不在同步方法中传递权限的 id,则将撤销已分配给角色的任何权限。
检查用户角色/权限
可以使用 hasRole
和 canDo
方法在 User
实例上检查角色和权限。
$isAdmin = Auth::user()->hasRole('administrator'); // pass role slug as parameter $isAdminOrEditor = Auth::user()->hasRole('administrator|editor'); // using OR operator $canUpdateUser = Auth::user()->canDo('update.user'); // pass permission slug as parameter $canUpdateOrCreateUser = Auth::user()->canDo('update.user|create.user'); // using OR operator
保护路由
Laravel RBAC 提供了用于保护单个路由和路由组的中间件。中间件期望两个逗号分隔的参数
- is 或 can 作为第一个参数 - 要检查的内容(角色/权限)
- 角色/权限别名作为第二个参数
Route::get('/backend', [ 'uses' => 'BackendController@index', 'middleware' => ['auth', 'rbac:is,administrator'] ]); Route::get('/backend', [ 'uses' => 'BackendController@index', 'middleware' => ['auth', 'rbac:is,administrator|editor'] ]); Route::get('/dashboard', [ 'uses' => 'DashboardController@index', 'middleware' => ['auth', 'rbac:can,view.dashboard'] ]); Route::get('/dashboard', [ 'uses' => 'DashboardController@index', 'middleware' => ['auth', 'rbac:can,view.dashboard|view.statistics'] ]);
Blade 指令
Laravel RBAC 提供了两个 Blade 指令来检查用户是否已分配角色/权限。
检查角色
@ifUserIs('administrator')
// show admin content here
@else
// sorry
@endif
@ifUserIs('administrator|editor')
// show editor content here
@else
// sorry
@endif
检查权限
@ifUserCan('delete.user')
// show delete button
@endif
@ifUserCan('delete.user|manage.user')
// show delete button
@endif
许可证
Laravel RBAC 是开源软件,使用MIT 许可证授权