yaroslavmolchan / rbac
此包已被废弃,不再维护。未建议替代包。
为 Laravel 5.5 及更高版本提供简单的 RBAC/ACL,具有缓存和权限组。
1.0.3
2017-09-27 11:51 UTC
Requires
- php: >=5.5.9
- illuminate/support: ^5.3
README
为 Laravel 8 及更高版本提供简单的 RBAC/ACL,具有缓存权限和权限组,以便更方便地使用。
安装
使用以下命令使用 composer 安装此包:
composer require yaroslavmolchan/rbac
或者您可以将它添加到您的 composer.json
文件中,用于 Laravel 8.0:
"require": {
...
"yaroslavmolchan/rbac": "^2.0"
}
如果您使用 Laravel 5.5,则使用:
"require": {
...
"yaroslavmolchan/rbac": "^1.0"
}
然后运行 composer update
。
将服务提供者添加到 config/app.php
文件中的 providers
数组。
'providers' => [ ... /* * Package Service Providers... */ YaroslavMolchan\Rbac\RbacServiceProvider::class, ... ],
发布迁移文件
$ php artisan vendor:publish --provider="YaroslavMolchan\Rbac\RbacServiceProvider" --tag=migrations
然后运行迁移
$ php artisan migrate
将中间件添加到您的 app/Http/Kernel.php
文件中。
protected $routeMiddleware = [ ... 'role' => \YaroslavMolchan\Rbac\Middleware\CheckRole::class, 'permission' => \YaroslavMolchan\Rbac\Middleware\CheckPermission::class ];
将 Rbac 特性添加到您的 User
模型中
use \YaroslavMolchan\Rbac\Traits\Rbac; class User extends Authenticatable { use Rbac; ... }
使用
角色
创建角色
use \YaroslavMolchan\Rbac\Models\Role; $adminRole = Role::create([ 'name' => 'Administrator', 'slug' => 'admin' ]); $managerRole = Role::create([ 'name' => 'Manager', 'slug' => 'manager' ]);
附加和移除角色
您可以将角色简单地附加到用户上
use App\User; $user = User::find(1); $user->attachRole($adminRole); //or you can insert only id $user->attachRole($adminRole->id);
如果要将角色移除,操作相同
use App\User; $user = User::find(1); $user->detachRole($adminRole); //or you can insert only id $user->detachRole($adminRole->id);
检查角色
您可以简单地检查用户是否具有角色
use App\User; $user = User::find(1); if ($user->hasRole('admin')) { }
权限
创建权限
use \YaroslavMolchan\Rbac\Models\Permission; $createPermission = Permission::create([ 'name' => 'Create product', 'slug' => 'product.create' ]); $removePermission = Permission::create([ 'name' => 'Delete product', 'slug' => 'product.remove' ]);
附加和移除权限
您可以将权限非常简单地附加到角色上
use \YaroslavMolchan\Rbac\Models\Role; $adminRole = Role::find(1); $adminRole->attachPermission($createPermission); //or you can insert only id $adminRole->attachPermission($createPermission->id);
移除权限的操作相同
use \YaroslavMolchan\Rbac\Models\Role; $adminRole = Role::find(1); $adminRole->detachPermission($createPermission); //or you can insert only id $adminRole->detachPermission($createPermission->id);
如果您想附加或移除权限数组,您也可以这样做
use \YaroslavMolchan\Rbac\Models\Role; $adminRole = Role::find(1); $adminRole->attachPermissions([$createPermission, $removePermission]); //or you can insert only id $adminRole->detachPermission([$createPermission->id, $removePermission->id]);
use \YaroslavMolchan\Rbac\Models\Role; $adminRole = Role::find(1); $adminRole->detachPermissions([$createPermission, $removePermission]); //or you can insert only id $adminRole->detachPermissions([$createPermission->id, $removePermission->id]);
检查权限
您可以简单地检查用户是否具有权限
use App\User; $user = User::find(1); if ($user->canDo('product.create')) { }
每个角色的所有权限都存储在缓存中,当您检查权限时,它从缓存中获取信息,这就是为什么它运行得很快。
权限组
权限组是为了将一些权限分组到一个主要组中而创建的,然后您可以将权限组附加到角色上,并将此组中的所有权限附加到该角色上。这是一件非常实用的事情。
创建权限组
use \YaroslavMolchan\Rbac\Models\PermissionGroup; $productManagementPermissionGroup = PermissionGroup::create([ 'name' => 'Product management', 'module' => 'main' // optional ]);
将权限附加到/从权限组分离
将权限添加到组非常简单
use \YaroslavMolchan\Rbac\Models\Permission; $createPermission = Permission::find(1); $productManagementPermissionGroup->attachPermission($createPermission); //or you can insert only id $productManagementPermissionGroup->attachPermission($createPermission->id);
同样,从组中移除权限也很简单
use \YaroslavMolchan\Rbac\Models\Permission; $createPermission = Permission::find(1); $productManagementPermissionGroup->detachPermission($createPermission); //or you can insert only id $productManagementPermissionGroup->detachPermission($createPermission->id);
将权限组附加到/从角色分离
将权限组附加到角色非常简单
use \YaroslavMolchan\Rbac\Models\Role; $adminRole = Role::find(1); $adminRole->attachGroup($productManagementPermissionGroup);
同样,也可以分离权限组
use \YaroslavMolchan\Rbac\Models\Role; $adminRole = Role::find(1); $adminRole->detachGroup($productManagementPermissionGroup);
受保护的路由
您可以使用role
和permission
参数轻松保护您的路由
Route::get('/admin', [ 'uses' => 'AdminController@index', 'middleware' => 'role:admin' ]); Route::get('/products/create', [ 'uses' => 'ProductsController@create', 'middleware' => 'permission:product.create' ]);
Blade 扩展
您可以在 Blade 中这样检查角色和权限
@ifUserIs('admin') // show content only for admin @else // show content for other roles @endif @ifUserCan('product.create') // show product create content @endif
许可证
Laravel RBAC 是开源软件,采用MIT 许可协议