goez / acl
该包已被废弃,不再维护。没有建议的替代包。
适用于Laravel的简单基于角色的访问控制
6.0.1
2023-09-21 09:52 UTC
Requires
- php: >=7.4
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- illuminate/support: >=5.4 <=10
- phpunit/phpunit: ^7.0|^8.0
This package is auto-updated.
Last update: 2023-09-21 09:52:55 UTC
README
要求
- PHP 7.4+
安装
Goez/Acl 是一个独立的访问控制库,您可以使用 composer 在任何 PHP 项目中使用它
composer require goez/acl
Laravel
Goez/Acl 也支持 Laravel 5.4,只需按照以下步骤操作
-
从 composer 安装。
-
在 composer require 后发布配置。
php artisan vendor:publish --tag=acl-config
-
编辑
app/config/packages/goez/acl/config.php
<?php return [ 'init' => function ($acl) { // Initialize your permission here. // Example: // // $acl->fullPrivileges('admin'); // $acl->allow('author', 'read', 'article'); // $acl->allow('author', 'write', 'article'); // $acl->allow('guest', 'read', 'article'); // $acl->deny('guest', 'write', 'article'); }, ];
-
在您的代码中使用 Acl 的方法
// In controller: if ($acl->can('member', 'read', 'article')) { // ... }
在 Blade 模板中
@if (app('acl')->can('member', 'read', 'article`)) <!-- .... --> @endif
更多示例
对于下面的示例,您首先需要创建一个 Acl
实例
use Goez\Acl\Acl; $acl = new Acl();
添加角色
$acl->addRole('admin'); $acl->addRole('member'); $acl->addRole('guest'); var_dump($acl->hasRole('admin')); // true var_dump($acl->hasRole('member')); // true var_dump($acl->hasRole('notExists')); // false
为角色创建规则
$acl->allow('guest', 'read', 'article'); $acl->deny('guest', 'write', 'article'); var_dump($acl->can('guest', 'read', 'article')); // true var_dump($acl->can('guest', 'write', 'article')); // false
注意 1:方法 allow
和 deny
会自动添加角色。
注意 2:除非您允许,否则默认拒绝。
覆盖规则
$acl->allow('author', 'read', 'article'); // rule 1 $acl->allow('author', 'write', 'article'); // rule 2 $acl->deny('author', 'read', 'article'); // rule 3, override rule 1 $acl->deny('author', 'write', 'article'); // rule 4, override rule 2 var_dump($acl->can('author', 'read', 'article')); // false var_dump($acl->can('author', 'write', 'article')); // false
完全权限
$acl->fullPrivileges('admin'); var_dump($acl->can('admin', 'create', 'page')); // true var_dump($acl->can('admin', 'create', 'site')); // true var_dump($acl->can('admin', 'read', 'article')); // true var_dump($acl->can('admin', 'write', 'article')); // true
注意:方法 fullPrivileges
会自动添加角色。
多个动作或资源
$actions = ['create', 'read', 'write']; $resources = ['page', 'site', 'article']; $acl->allow('guest', 'read', $resources); $acl->allow('author', $actions, 'article'); $acl->allow('admin', $actions, $resources);
动作的通配符支持
$acl->allow('author', '*', 'article'); var_dump($acl->can('author', 'read', 'article')); // true var_dump($acl->can('author', 'write', 'article')); // true var_dump($acl->can('author', 'read', 'news')); // false var_dump($acl->can('author', 'write', 'news')); // false
在 can
方法中支持通配符。
$acl->allow('guest', 'write', 'article:comment'); var_dump($acl->can('guest', '*', 'article')); // true var_dump($acl->can('guest', '*', 'article:content')); // false var_dump($acl->can('guest', '*', 'news:*')); // false
子资源
使用 :
来定义子资源。
在这个例子中,article
与 article:*
相同。
$acl->allow('guest', 'read', 'article'); $acl->allow('guest', 'write', 'article:comment'); $acl->allow('author', '*', 'article:*'); var_dump($acl->can('author', 'read', 'article:title')); // true var_dump($acl->can('author', 'read', 'article:content')); // true var_dump($acl->can('author', 'read', 'article:comment')); // true var_dump($acl->can('author', 'write', 'article:title')); // true var_dump($acl->can('author', 'write', 'article:content')); // true var_dump($acl->can('author', 'write', 'article:comment')); // true var_dump($acl->can('guest', 'read', 'article:title')); // true var_dump($acl->can('guest', 'read', 'article:content')); // true var_dump($acl->can('guest', 'read', 'article:comment')); // true var_dump($acl->can('guest', 'write', 'article:title')); // false var_dump($acl->can('guest', 'write', 'article:content')); // false var_dump($acl->can('guest', 'write', 'article:comment')); // true
许可证
MIT