voku / simpleacl
PHP 简单访问控制列表 (ACL)。
Requires
- php: >=7.0.0
Requires (Dev)
- phpunit/phpunit: 5.*|6.*
- dev-master
- 7.0.0
- 6.0.2
- 6.0.1-RC2
- 6.0.0-RC1
- 5.0.0-RC1
- 4.0.0-RC1
- 3.0.3-RC3
- 3.0.1-RC2
- 3.0.0-RC1
- 2.0.28
- 2.0.27
- 2.0.26
- 2.0.25
- 2.0.24
- 2.0.23
- 2.0.22
- 2.0.21
- 2.0.20
- 2.0.19
- 2.0.18
- 2.0.17
- 2.0.16
- 2.0.15
- 2.0.14
- 2.0.13
- 2.0.12
- 2.0.11
- 2.0.10
- 2.0.9
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dependabot/add-v2-config-file
- dev-whitesource/configure
- dev-performance
- dev-tabsToSpaces
This package is auto-updated.
Last update: 2024-09-04 05:06:00 UTC
README
PHP 简单访问控制列表 (ACL)。
警告:这只是一个维护分支 "https://github.com/alexshelkov/SimpleAcl/"
安装
使用 composer
在您的 composer.json 中添加以下内容
{ "require": { "voku/simpleacl": "3.*" } }
手动
下载库并注册 PSR-0 兼容的自动加载器。
使用方法
基本用法
理论
有 4 种类型的对象: 规则、角色、资源 和 Acl,它包含 规则 的列表。一些 规则 可以授予某些 角色 对某些 资源 的访问权限。
创建规则
让我们创建“查看”规则,并授予“用户”对“页面”的访问权限(注意:所有名称都是大小写敏感的)
$view = new Rule('View'); $view->setRole(new Role('User')); $view->setResource(new Resource('Page')); $view->setAction(true); // true means that we allow access var_dump((bool)$view->isAllowed('View', 'User', 'Page')); // true
添加规则
没有 Acl 的规则没有多少意义。因此,我们需要将其添加到 Acl 中。在下一个示例中,我们在 Acl 中添加了一些规则,并看看会发生什么。
$acl = new Acl(); $user = new Role('User'); $admin = new Role('Admin'); $siteFrontend = new Resource('SiteFrontend'); $siteBackend = new Resource('SiteBackend'); $acl->addRule($user, $siteFrontend, new Rule('View'), true); $acl->addRule($admin, $siteFrontend, 'View', true); // you can use string as rule $acl->addRule($admin, $siteBackend, 'View', true); var_dump($acl->isAllowed('User', 'SiteFrontend', 'View')); // true var_dump($acl->isAllowed('User', 'SiteBackend', 'View')); // false var_dump($acl->isAllowed('Admin', 'SiteFrontend', 'View')); // true var_dump($acl->isAllowed('Admin', 'SiteBackend', 'View')); // true
有多种方式可以向 Acl 添加规则,addRule 方法接受一个到四个参数,因此您还可以像这样添加规则
<?php // before add $view rule to Acl you can set it action, role or resource $acl->addRule($view); // where is true -- is action $acl->addRule($view, true); // in that case action must be set before adding rule $acl->addRule($user, $siteBackend, $view);
角色和资源继承
正如您可能在之前的示例中注意到的那样,我们有一些代码重复,因为“用户”和“管理员”都被允许“查看”“网站前端”,我们添加了 2 条规则。但可以通过使用角色继承来避免这种情况。
$acl = new Acl(); $user = new Role('User'); $admin = new Role('Admin'); $siteFrontend = new Resource('SiteFrontend'); $siteBackend = new Resource('SiteBackend'); $acl->addRule($user, $siteFrontend, 'View', true); $acl->addRule($admin, $siteFrontend, 'View', true); $acl->addRule($admin, $siteBackend, 'View', true); var_dump($acl->isAllowed('User', 'SiteFrontend', 'View')); // true var_dump($acl->isAllowed('User', 'SiteBackend', 'View')); // false var_dump($acl->isAllowed('Admin', 'SiteFrontend', 'View')); // true var_dump($acl->isAllowed('Admin', 'SiteBackend', 'View')); // true
继承也适用于资源。
使用回调
您可以使用回调创建更复杂的规则。
$acl = new Acl(); $user = new Role('User'); $siteFrontend = new Resource('SiteFrontend'); $acl->addRule($user, $siteFrontend, 'View', function (SimpleAcl\RuleResult $ruleResult) { echo $ruleResult->getNeedRoleName() . "\n"; echo $ruleResult->getNeedResourceName() . "\n"; echo $ruleResult->getRule()->getRole()->getName() . "\n"; echo $ruleResult->getRule()->getResource()->getName() . "\n"; return true; }); var_dump($acl->isAllowed('User', 'SiteFrontend', 'View')); // true // Outputs: // User // SiteFrontend // User // SiteFrontend // bool(true)
使用角色和资源聚合
您可以检查访问权限不是针对特定的角色或资源,而是针对聚合它们的对象。这些类型的对象必须分别实现 SimpleAcl\Role\RoleAggregateInterface 和 SimpleAcl\Role\ResourceAggregateInterface。
您可以使用 SimpleAcl\Role\RoleAggregate 和 SimpleAcl\Role\ResourceAggregate 作为允许聚合的对象。
$acl = new Acl(); $user = new Role('User'); $admin = new Role('Admin'); $all = new RoleAggregate; $all->addRole($user); $all->addRole($admin); $siteFrontend = new Resource('SiteFrontend'); $siteBackend = new Resource('SiteBackend'); $acl->addRule($user, $siteFrontend, 'View', true); $acl->addRule($admin, $siteBackend, 'View', true); var_dump($acl->isAllowed($all, 'SiteFrontend', 'View')); // true var_dump($acl->isAllowed($all, 'SiteBackend', 'View')); // true
您可以在回调中访问角色和资源聚合。
$acl->addRule($user, $siteFrontend, 'View', function (SimpleAcl\RuleResult $ruleResult) { var_dump($ruleResult->getRoleAggregate()); var_dump($ruleResult->getResourceAggregate()); }); var_dump($acl->isAllowed($all, 'SiteFrontend', 'View')); // true
了解更多信息,请参阅维基页面。