phpexperts / laravel-rbac
Laravel 5 的基于角色的访问控制
1.0.4
2018-12-20 02:46 UTC
Requires
- php: >=7.1.0
- illuminate/support: >=5.6
- phpexperts/conciseuuid: ^1.0
README
为 Laravel 5 提供简单的 RBAC/ACL 实现。兼容 Laravel >=5.4 的 https://github.com/thelfensdrfer/laravel-rbac 分支。
安装
使用以下命令通过 composer (Packagist) 安装此包
composer require phpexperts/laravel-rbac
或修改你的 composer.json
"require": {
...
"phpexperts/laravel-rbac": "^1.0"
}
然后运行 composer update
。
安装后,将 ServiceProvider 注册到 config/app.php
文件中的 providers
数组
PHPExperts\LaravelRBAC\RbacServiceProvider::class,
运行迁移
$ php artisan migrate
将 RBAC 中间件添加到你的 app/Http/Kernel.php
protected $routeMiddleware = [ ... 'rbac' => '\PHPExperts\LaravelRBAC\Middleware\Rbac::class' ];
将 Rbac 特性添加到你的 User
模型
use PHPExperts\LaravelRBAC\Traits\Rbac; class User extends Authenticatable { use HasRoles; ... }
使用方法
角色
创建角色
$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 许可证 的许可。