thelia / customer-group-acl-module
0.2.3
2016-01-28 09:02 UTC
Requires
- thelia/customer-group-module: ~0.1
- thelia/installer: ~1.0
README
通过访问控制列表机制扩展CustomerGroup模块,可以用来允许或拒绝客户组访问某些资源。
安装
手动
- 将模块复制到
<thelia_root>/local/modules/
目录,并确保模块名称为CustomerGroupAcl。 - 在Thelia管理面板中激活它
Composer
将其添加到您的Thelia composer.json主文件中
composer require thelia/customer-group-acl-module:~0.1
## 更新
0.1.3
- 将acl数据表更改为添加class_name,用于检查特定对象的acl类名;
- 分发
CheckAclEvent_[resource]
; - 更改checkAcl定义以checkAcl($resources, $accesses, $accessOr = false, $entityId = null, $dispatchEvent = false)
- $entityId,对象标识,如果isset资源必须单独存在,
- $dispatchEvent,如果设置,则分发CheckAclEvent,默认为false;
执行 setup/update-0.1.2-0.1.3.sql
脚本。
配置
使用配置文件
使用客户组ACL的模块必须在模块配置目录中的 acl.xml
文件中定义它们。当模块激活时将创建ACL。
由于ACL应用于客户组,您必须已经创建了一些,才能使用它们(请参阅CustomerGroup模块文档)。在这个例子中,我们假设 client
、vip
、also-vip-1
和 also-vip-2
组已存在。
<?xml version="1.0" encoding="UTF-8" ?> <config xmlns="http://thelia.net/acl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://thelia.net/acl http://thelia.net/acl/acl.xsd"> <acls> <acl code="vip-perks"> <descriptive locale="en_US"> <title>VIP perks</title> <description>Special VIP perks.</description> </descriptive> <descriptive locale="en_US"> <title>Avantages VIP</title> <description>Avantages spéciaux VIP.</description> </descriptive> </acl> <customergroups> <customergroup group="vip"> <customergroupacl aclcode="vip-perks"> <access right="VIEW"/> </customergroupacl> </customergroup> <customergroup group="extra-vip-1"> <extends-customergroupacl group="vip" /> </customergroup> <customergroup group="extra-vip-2"> <extends-customergroupacl group="vip" aclcode="vip-perks" /> </customergroup> </customergroups> <acls> </config>
在这里,我们定义一个ACL资源 vip-perks
并授予 VIEW
类型访问权限给 vip
组。将 extra-vip-1
组设置为与 vip
组具有相同的访问权限。将 extra-vip-2
组也设置为与 vip
组具有相同的权限,但仅针对 vip-perks
ACL资源。
使用后台管理界面
ACL和组访问也可以在Thelia后台管理界面中进行配置。在 工具 菜单中有一个链接到配置页面。
访问类型
可用的访问类型在Thelia访问管理器中定义
查看
创建
更新
删除
此外,可以使用 ALL
访问权限授予所有可用的访问权限。
检查组访问
PHP
可以使用 customer_group_acl.tool
来检查ACL访问。
$aclTool = $container->get("customer_group_acl.tool"); // simple check $aclTool->checkAcl("vip-perks", AccessManager::VIEW); // resources and accesess arguments can be a single value or an array of values $aclTool->checkAcl( [ "myAcl1", "myAcl2", ], [ AccessManager::VIEW, AccessManager::CREATE, ] ); // by default, checks that at all accesses are granted // but you can also check that only at least one access is granted $aclTool->checkAcl( "myAcl", [ AccessManager::VIEW, AccessManager::CREATE, ], true );
Smarty
Smarty插件也提供用于在模板中检查ACL访问。
与PHP函数一样,您可以同时检查多个资源和访问权限,并且可选地只要求一个访问权限。
简单检查
如果所需的访问权限未被授予,则 check_acl
函数将抛出异常。
{check_acl code='vip-perks' access='view'} {check_acl code='vip-perks,myAcl' access='view,create'} {check_acl code='myAcl' access='view,create,update' access_or=true}
块检查
可以使用 acl
和 elseacl
标签以块语法检查ACL访问。
{acl name='acl-check' code='vip-perks' access='view'} Here is some super secret stuff ! {/acl} {elseacl rel='acl-check'} Get VIP access for more cool stuff ! {/elseacl}
循环
acl
此循环列出ACL。
输入参数
order 可以是以下之一
id
(默认值)module
module_reverse
输出参数
customer-group-acl
此循环列出客户组访问授权。