goez/acl

该包已被废弃,不再维护。没有建议的替代包。

适用于Laravel的简单基于角色的访问控制

6.0.1 2023-09-21 09:52 UTC

This package is auto-updated.

Last update: 2023-09-21 09:52:55 UTC


README

Build Status Code Climate Test Coverage

要求

  • PHP 7.4+

安装

Goez/Acl 是一个独立的访问控制库,您可以使用 composer 在任何 PHP 项目中使用它

composer require goez/acl

Laravel

Goez/Acl 也支持 Laravel 5.4,只需按照以下步骤操作

  1. 从 composer 安装。

  2. 在 composer require 后发布配置。

    php artisan vendor:publish --tag=acl-config
  3. 编辑 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');
    
        },
    ];
  4. 在您的代码中使用 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:方法 allowdeny 会自动添加角色。

注意 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

子资源

使用 : 来定义子资源。

在这个例子中,articlearticle:* 相同。

$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