macgriog / laravel-acl
Requires
- php: ^7.1
- laravel/framework: ^5.3
Requires (Dev)
- pdepend/pdepend: ^2.5
- phploc/phploc: ^3.0
- phpmd/phpmd: @stable
- phpunit/phpunit: ~5.0
- sebastian/phpcpd: ^3.0
- squizlabs/php_codesniffer: 2.*
This package is not auto-updated.
Last update: 2024-09-29 05:27:44 UTC
README
Laravel ACL 包
基于用户-角色-权限的简单访问控制,来自 OctoberCMS。
工作原理
基于用户具有特定权限授予访问。
角色被认为是权限集。
用户可以有权限。
用户可以分配多个角色。
对于单个用户,所有权限都会合并。
权限持久化在 JSON 列中,例如。
{"backend.read" : 1, "backend.write" : -1, "system.shutdown": 0}
1 = 授予权限 0 = 未授予权限 -1 = 强制撤销授予的权限(例如,如果是从角色继承的)
安装
要通过 Composer 安装,请运行以下命令
composer require macgriog/laravel-acl
Laravel 5.4 和 5.3:添加 Service Provider
注意:由于 Laravel 5.5,Service Providers 已自动注册。
如果您正在使用较旧版本或已选择退出自动发现,请在 config/app.php 中添加以下内容。
'providers' => [
Macgriog\Acl\AclServiceProvider::class,
],
数据库迁移
此包旨在与关系数据库(如 MariaDB)一起使用。它期望有两个表:users 和 roles。有关架构详情,请参阅 迁移文件。
在新的 Laravel 安装中,您可以通过以下方式发布和运行必要的迁移
php artisan vendor:publish --provider="Macgriog\Acl\AclServiceProvider"
php artisan migrate
请注意,这将需要安装 doctrine/dbal 包。它不是作为 composer 依赖项添加的,因为运行迁移是完全可选的,具体取决于您的使用情况。
用法
用户模型
将特性添加到您的用户模型中,并定义角色关系
<?php
namespace App;
use Macgriog\Acl\Models\Role;
use Macgriog\Acl\Traits\UserPermissions;
class User extends Authenticatable
{
use UserPermissions;
/**
* @return mixed
*/
public function roles()
{
return $this->belongsToMany(
Role::class,
'role_user',
'user_id',
'role_id'
);
}
public function getRoles()
{
if ($this->roles) {
return $this->roles;
}
return $this->roles = $this->roles();
}
}
现在您可以如此检查权限
$user->hasAccess('update'); // true|false if User has Permission
$user->hasAccess(['update', 'create']) // true|false if ALL permissions are given
$user->hasAnyAccess(['update', 'create']) // true|false if ANY permission is given
注意:hasAccess 和 hasAnyAccess 将检查用户上的 is_root 属性。如果用户是 Root,则始终认为权限已授予。您可以使用 Eloquent 的属性访问器根据需要修改此行为。
并且您可以设置权限
$user->permissions = ['read' => true, 'update' => true];
$user->save();
角色模型
有一个可用的 角色类 可以直接使用。角色,像用户一样,有一个权限列。这使得定义权限集并使用角色在用户之间重用它们变得容易。
用于访问控制的路由中间件
此包提供了一个中间件,可注册在您的路由中间件组中
在 App\Http\Kernel.php 中注册
protected $routeMiddleware = [
// ...
'acl' => \Dreipc\Acl\Middleware\CheckPermission::class,
];
示例用法
Route::get('backend')->middleware('acl:backend.access');
它接受所需的权限作为参数,并且如果当前用户没有授予所有这些权限,则中止。
测试
通过 PHPUnit 运行测试
vendor/bin/phpunit
参考
- OctoberCMS https://github.com/octobercms/october