chippyash / zend-acl-xml-builder
使用 XML 配置 Zend 2 Acl 实例
Requires
- php: >=5.6
- chippyash/builderpattern: >=3,<4
- chippyash/strong-type: >=5,<6
- zendframework/zend-permissions-acl: >=2.6.0, <2.7.0
Requires (Dev)
- phpunit/phpunit: ~4.3.0
README
质量保证
上述徽章代表当前的开发分支。一般来说,除非测试、覆盖率和可用性都符合要求,否则我不会推送到 GitHub。在休假期间、需要为其他下游项目编写代码等短时期内可能不成立。如果您需要稳定的代码,请使用标记版本。阅读“进一步文档”和“安装”。
请注意,该库在 3.0.0 版本中取消了 PHP5.5 的开发者支持。如果您需要 PHP 5.5 的支持,请使用版本 >=2,<3
是什么?
提供使用 XML 指定 Zend ACL 的功能。XML 由一个 XSD 文件验证,您也可以在您的 XML 编辑器中使用此 XSD 文件
为什么?
Zend/Permissions/Acl 是一种提供应用程序访问控制功能的优秀且轻量级方式,但使用原生命令集进行配置可能会很麻烦。由于它的结构,它非常适合通过 XML 配置来驱动。
这也意味着 ACL 可以由某些第三方应用程序或服务管理。
大多数人都能够编写一个 XSL 转换,例如,将 LDAP 中的定义转换为该库的格式,以便然后从您的组织 LDAP 服务器控制 ACL。
何时
当前库可以处理读取嵌套 XML 文件(或内容)并返回一个 ACL。如果您想要新功能,请通过问题跟踪器提出建议,或者更好的是,分支库并提交一个拉取请求(但请别忘了单元测试!)
如何
要了解如何使用它,请参阅测试文件,特别是,以 AclDirectorTest 作为起点,并从这里开始工作。
本质上你需要做两件事
- 提供 ACL 的 XML 定义
- 告诉 Director XML 的位置
该库依赖于 Builder Pattern 和 Strong Type 库。
定义 XML
为了获得权威性,请研究位于 src/chippyash/Zend/Acl/Xml/xsd 的 XSD 文件
还有一个用于测试的示例 XML 文件位于 test/src/chippyash/Zend/Acl/Xml/fixtures
XSD 命名空间为 http://schema.zf4.biz/schema/zendacl。它可以在同一 URL 上公开访问。
您的 XML 文件应该定义为
<?xml version="1.0" encoding="UTF-8"?> <acl xmlns="http://schema.zf4.biz/schema/zendacl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schema.zf4.biz/schema/zendacl http://schema.zf4.biz/schema/zendacl" > </acl>
注意。如果您想对 XSD 进行修改,可以将 xsi:schemaLocation 属性的第二部分替换为指向本地磁盘上的 XSD 版本的指针。例如。
xsi:schemaLocation="http://schema.zf4.biz/schema/zendacl ../../zendacl.xsd"
本质上,Zend-ACL 将 ACL 定义为三部分
- 角色
- 资源
- 规则
虽然您可以独立定义角色和资源,但规则要求您已经定义了要操作的角色和资源。规则还允许您设置额外的权限和断言。
要提供访问控制列表(ACL),必须指定所有三个部分。
角色
- 一个角色可以有以下可选属性
- type: 字符串:默认 = "GenericRole"。您专用角色类的名称。默认使用Zend GenericRole
- parents: 字符串:默认 = none。以逗号分隔的父角色名称列表
- 角色元素的内容是该角色的名称
资源
- 资源可以有以下可选属性
- type: 字符串:默认 = "GenericResource"。您专用资源类的名称。默认使用Zend GenericResource
- parent: 字符串:默认 = none。该资源的父名称。注意:与角色不同,资源只能有一个父级。
- 资源元素的内容是该资源的名称
规则
- 规则有一个必选属性
- type: 字符串:'ALLOW' 或 'DENY' 之一
- 规则有以下可选参数
- roles: 字符串:默认 = "*"。逗号分隔的角色名称列表,规则适用于这些角色
- resources: 字符串:默认 = "*"。逗号分隔的资源名称列表,规则适用于这些资源
- assertion: 字符串:默认 = none。提供断言的完全命名空间类。
该类必须存在并实现Zend\Permissions\Acl\Assertion\AssertionInterface。您可以在test/src/chippyash/Zend/Acl/Xml/Stubs中找到一个示例
- 规则可以包含可选的 <privilege> 元素。每个 <privilege> 元素包含任意权限的名称。
导入定义
您可以使用以下方法将其他ACL定义导入到您的定义中。
<imports> <import>[path_to_file/|../*path_to_file/]file.xml<import> </imports>
如果没有给出路径,则期望文件与父文件在同一目录下。如果路径以 .. 开头,则期望文件在相对于父文件的目录中。如果提供了路径,则期望文件在该目录中。因此以下都是有效的
myfile.xml ../../path/to/file.xml /path/to/file.xml
注意
所有定义项都按在XML文件中出现的顺序进行处理。导入首先按L2R深度优先策略处理。
构建ACL
use Chippyash\Zend\Acl\Xml\AclDirector; use Chippyash\Type\String\StringType; $location = new StringType('/location/of/my/acl.xml'); $director = new AclDirector($location); $acl = $director->build();
或者,您可以将要操作的XML作为字符串传递,而不是文件。当然,该字符串必须符合zendacl.xsd(http://schema.zf4.biz/schema/zendacl)模式,并且是有效的XML。
use Chippyash\Zend\Acl\Xml\AclDirector; use Chippyash\Type\String\StringType; $content = new StringType($myAclXml); $director = new AclDirector($content); $acl = $director->build();
更改库
- 分叉它
- 编写测试
- 修改它
- 发起一个pull request
发现了一个您无法解决的bug吗?
- 分叉它
- 编写测试
- 发起一个pull request
注意。在您的pull request之前,确保您已经rebase到HEAD
在哪里?
该库托管在Github上。它可在Packagist.org找到。
安装
安装Composer
对于生产环境
添加
"chippyash/zend-acl-xml-builder": ">=3,<4"
到您的composer.json "requires"部分
对于开发
克隆此仓库,然后在本地仓库根目录中运行Composer以拉取依赖项
git clone git@github.com:chippyash/Zend-Acl-Xml-Builder.git ZendAclBuilder cd ZendAclBuilder composer install --dev
要运行测试
cd ZendAclBuilder vendor/bin/phpunit -c test/phpunit.xml test/
其他内容
查看ZF4 Packages获取更多包
许可证
此软件库在BSD 3 Clause许可下发布
此软件库版权所有(c)2015-2018,Ashley Kitson,英国
历史
V0... 预发布版本
V1.0.0 第一个版本
V1.1.0 新特性:命名空间了XSD并将其放置在公共服务器上
V1.2.0 新特性
- ACL定义可以导入其他定义
- XML可以以字符串或文件的形式传递
V1.2.1 移除对Zend-ACL版本的硬依赖
V2.0.0 兼容性中断:将 chippyash\Zend\Acl 命名空间更改为 Chippyash\Zend\Acl
V2.0.1 从coveralls迁移到codeclimate
V2.0.2 添加链接到包
V2.0.3 验证PHP 7兼容性
V2.0.4 更新依赖关系
V2.0.5 更新composer - 由于packagist composer.json格式更改强制执行
V3.0.0 兼容性中断。撤回对旧PHP版本的支持
V3.1.0 许可证变更:从GPL V3更改为BSD 3条款
readme更新