fmlimao/php-acl

适用于所有项目的PHP简单ACL。

1.2.2 2020-04-27 11:49 UTC

This package is auto-updated.

Last update: 2024-09-27 21:38:17 UTC


README

当我说是简单的时候,它确实是简单的!

安装

composer require fmlimao/php-acl

如何使用

$acl = new Fmlimao\Acl;

基本上,只需在授予或撤销权限时将一个角色关联到一个资源和一个权限即可

$acl->allow('Papel', 'Recurso', 'Privilégio');

// ou

$acl->deny('Papel', 'Recurso', 'Privilégio');

也可以在任何三个参数中传递一个数组

$acl->allow(['Papel 1', 'Papel 2'], ['Recurso 1', Recurso 2', Recurso 3'], ['Privilégio 1']);

我们可以将null作为任何参数的值。

  • 如果角色是null,则资源及其权限将分配给所有角色。
  • 如果资源是null,则权限将分配给所有资源。
  • 如果权限是null,则角色将获得此资源的所有权限。

示例

// Todos os Papeis terão esses Privilégios nestes Recursos.
$acl->allow(null, ['products', 'categories'], ['list', 'update']);

// O papel "admin" terá esses Privilégios em todos os Recursos
$acl->allow('admin', null, ['create', 'delete']);

// O papel "member" terá todos os Privilégios no recurso "orders"
$acl->allow('member', 'orders', null);

要检查是否有或没有权限,只需这样调用

$isAllowed = $acl->isAllowed('Papel', 'Recurso', 'Privilégio');

这里也可以作为参数传递数组

$isAllowed = $acl->isAllowed(['Papel 1', 'Papel 2'], ['Recurso 1', Recurso 2', Recurso 3'], ['Privilégio 1']);

也可以在参数中传递一个数组

$isAllowed = $acl->isAllowed(['Papel 1', 'Papel 2'], ['Recurso 1', Recurso 2', Recurso 3'], ['Privilégio 1']);

角色继承

角色可以相互关联,从而在它们之间产生继承关系。

$acl = new Fmlimao\Acl;

$acl->addRole('Papel 1');

// Papel 2 é filho do Papel 1.
$acl->addRole('Papel 2', 'Papel 1');

// Papel 3 é filho do Papel 2.
$acl->addRole('Papel 3', 'Papel 2');

// Papel 4 é filho do Papel 3.
$acl->addRole('Papel 4', 'Papel 3');

$acl->allow('Papel 1', 'Recurso 1', 'Listar');
$acl->allow('Papel 2', 'Recurso 1', 'Criar');
$acl->allow('Papel 3', 'Recurso 1', 'Exibir');
$acl->allow('Papel 4', 'Recurso 1', ['Alterar', 'Deletar']);
$acl->deny('Papel 4', 'Recurso 1', 'Listar');

$alloweds = [];

// Retorna TRUE por causa do Papel 2.
$alloweds[] = $acl->isAllowed('Papel 4', 'Recurso 1', 'Criar');

// Retorna TRUE por causa do Papel 3.
$alloweds[] = $acl->isAllowed('Papel 4', 'Recurso 1', 'Exibir');

// Retorna TRUE por causa do próprio Papel 4.
$alloweds[] = $acl->isAllowed('Papel 4', 'Recurso 1', 'Alterar');

// Retorna FALSE pois nem o papel atual e nem seus pais tem esse privilégio.
$alloweds[] = $acl->isAllowed('Papel 4', 'Recurso 1', 'Vincular');

// Retorna FALSE. Apesar do Papel 1 ter esse privilégio, foi retirado do Papel 4
$alloweds[] = $acl->isAllowed('Papel 4', 'Recurso 1', 'Listar');

var_dump($alloweds);