此包已被废弃,不再维护。未建议替代包。

为 Laravel 5.5 及更高版本提供简单的 RBAC/ACL,具有缓存和权限组。

1.0.3 2017-09-27 11:51 UTC

This package is auto-updated.

Last update: 2022-05-03 12:18:40 UTC


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);

受保护的路由

您可以使用rolepermission参数轻松保护您的路由

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 许可协议