mattmezza / aclify
基于 YAML 文件的一个简单且直接的 ACL 组件。
Requires
- php: ^7.1
- illuminate/support: ^5.6
- symfony/yaml: ^4.0
Requires (Dev)
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-09-17 10:17:00 UTC
README
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
(具有此角色的用户可以访问 mailchimp
或 facebook
等工具)和 support
(具有此角色的用户可以访问 cms_tools
)。
然后我们指定了允许的用户:mary
是一个高级用户,她几乎可以检查任何事情(marketing
、support
、billing
),而 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 }