mattmezza/aclify

基于 YAML 文件的一个简单且直接的 ACL 组件。

1.0.0 2018-05-29 15:42 UTC

This package is auto-updated.

Last update: 2024-09-17 10:17:00 UTC


README

Build Status

aclify

基于 YAML 文件的一个简单且直接的 ACL 组件。

规范

Aclify 是一个非常简单的组件,可以帮助您管理一小组用户的角色和权限。

您是否曾处于一个不需要数据库、不需要身份验证(因为它是通过外部提供者完成的)、只需要一小组角色和权限的小项目环境中?

如果您有,那么这个包就是为您准备的。

Aclify 允许您定义角色,每个角色都有一组权限(如果您属于该角色,则可以执行的操作)。它还允许您为每个用户指定一组角色。

它可以紧密地与您的用户对象表示相结合使用,也可以作为外部组件使用,每次调用时指定用户。

安装

composer require mattmezza/aclify

使用

将您的用户和角色及其权限以以下方式写入 YAML 文件

roles: 
  billing: 
    - payments
  marketing: 
    - mailchimp
    - facebook
  support: 
    - cms_tools
users: 
  mary: 
    - marketing
    - billing
    - support
  gigi: 
    - support

我们这样指定了三个角色:billing(具有此角色的用户可以管理 payments),marketing(具有此角色的用户可以访问 mailchimpfacebook 等工具)和 support(具有此角色的用户可以访问 cms_tools)。

然后我们指定了允许的用户:mary 是一个高级用户,她几乎可以检查任何事情(marketingsupportbilling),而 gigi 是一个基本用户,仅启用了 support 权限。

与用户对象紧密使用

如果您想紧密地将 Aclify 与您的用户对象表示相结合使用,可以通过扩展抽象类 Aclify\ACLUser 来实现,该类强制您定义两个方法(用户 ID 和 ACL 对象检索 - 您可以使用您项目的依赖注入组件)并为您提供一些继承的方法来检查 User 是否可以或不能使用某些权限。

按如下方式定义您的用户对象(您可以在类中添加您的方法)

use Aclify\ACL;

class User extends ACLUser
{
    private $acl;
    private $id;
    public function __construct(ACL $acl, string $id) 
    {
        $this->acl = $acl;
        $this->id = $id;
    }
    public function getACL() : ACL
    {
        return $this->acl;
    }
    public function getId() : string
    {
        return $this->id;
    }
}

然后按如下方式使用它

$acl = new Aclify\ACL();
$gigi = new User($acl, "gigi@domain.com");
if ($gigi->can("create_post"))
{
    // ...
}

非用户对象紧密使用

如果您不想将用户表示绑定到组件,则可以避免扩展提供的 ACLUser 类,而是可以直接使用 ACL,请按以下方式操作

$acl = new Aclify\ACL();
if ($acl->can("gigi@domain.com", "create_post"))
{
    // ...
}

异常

在实例化 ACL 类时,组件会尝试从默认的 ./acl.yml 文件中读取规范。如果您想指定不同的文件,可以在构造函数中传递文件路径。如果文件不可读或找不到(或不是 yaml 文件),则将抛出异常,因此最好按以下方式使用它

use Aclify\ACL;
use Aclify\Exceptions\MissingACLSpecsFile;

try {
    $acl = new ACL("./config/acl-new.yml");
    // ...
} catch (MissingACLSpecsFile $e) {
    // do something with $e
}