laravel-rbac
是一个基于Laravel5
的RBAC
(Role-Based Access Control)扩展包。
Rbac | Laravel | PHP |
---|---|---|
0.0.x | >=5.x | >=7.1 |
直接通过命令行来快速安装:
composer require niefufeng/laravel-rbac
或者在composer.json
的require
里加入:
{
"require": {
"huang-yi/rbac-laravel": "1.0.*"
}
}
然后执行composer install
。
首先在config/app.php
里的providers
里添加:
[
'providers' => [
NieFufeng\LaravelRbac\ServiceProvider::class,
]
]
然后发布配置文件和migration文件,在命令行执行:
php artisan vendor:publish
发布之后根据自己实际情况配置config/rbac.php
文件。
执行数据库迁移,在命令行执行:
php artisan migrate
接下来,打开项目的User
模型,需要使用NieFufeng\LaravelRbac\Traits\UserTrait
和实现NieFufeng\LaravelRbac\Contracts\UserInterface
:
<?php
namespace App;
use NieFufeng\LaravelRbac\Contracts\UserInterface;
use NieFufeng\LaravelRbac\Traits\UserTrait;
class User extends Authenticatable implements UserInterface
{
use UserTrait;
}
$user = App\User::first();
// 新建权限
$permission = NieFufeng\LaravelRbac\Models\Permission::create([
'name' => '新建用户',
'slug' => 'create-users',
'description' => '新建用户'
]);
// 新建角色
$role = NieFufeng\LaravelRbac\Models\Role::create([
'name' => '管理员',
'slug' => 'admin',
'description' => '牛逼哄哄的管理员'
]);
// 给角色赋予权限,接受array、Collection、int和Permission
$role->attachPermissions($permission);
// 给用户赋予角色
$user->attachRoles($role);
// 判断用户是否有xx角色
$user->hasRoles('admin');//true
// hasPermissions和may是一个方法
$user->hasPermissions('create-users');//true
$user->may('create-users');//true
// 剥夺角色
$user->detachRoles($role);
// 获取用户的所有角色信息
$user->roles;
// 从缓存里获取用户的所有角色信息
$user->cachedRoles();
// 从缓存里清除用户的角色信息(执行attachRoles和detachRoles会自动清除)
$user->forgetCachedRoles();
当然,扩展目前自带了两个中间件,可以按照需要在app/Http/Kernel.php
里加入:
protected $routeMiddleware = [
'permissions' => NieFufeng\LaravelRbac\Middleware\Permission::class,
'role' => NieFufeng\LaravelRbac\Middleware\Role::class
];
然后即可在路由中使用:
Route::get('/', [
'users' => 'XyzController@hehe',
'middleware' => 'role:admin,super-admin'
]);
//判断是否有角色,多个角色用半角,隔开
@hasRole('admin,super-admin')
如果你看到这段话,说明你是管理员。
@endHasRole
//判断是否有权限,多个权限用半角,隔开
@hasPermission('create-users')
<button>新建用户</button>
@endHasPermission
Bugs和问题可提交至Github
Email:[email protected]
QQ:7547811
当然是选择 MIT license 啦~