sminnee / silverstripe-microacl
此包已被弃用,不再维护。未建议替代包。
基于权限代码的Silverstripe实验性ACL系统
0.1.0
2020-08-12 04:14 UTC
Requires
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is auto-updated.
Last update: 2024-03-12 12:00:40 UTC
README
这是一个Silverstripe模块,允许您将简单的ACL附加到Silverstripe数据对象上。它旨在提供基于现有权限代码的更完整的权限系统,而无需对核心框架进行重大重构以支持它。
使用方法
首先,安装模块
> composer require sminnee/silverstripe-microacl:^0.1
然后将ACLExtension类添加到数据对象中
use SilverStripe\ORM\DataObject; use Sminnee\MicroACL\ACLExtension; class MyClass extends DataObject { // ... private static $extensions = [ ACLExtension::class, ]; }
运行dev/build
,您就可以使用了!
权限模型
当前权限模型具有以下特性。
-
默认情况下,每个记录都有“标准权限”。这提供了类级别安全性
-
个别记录可以设置为具有“受限权限”。这提供了记录级别安全性。
-
用户(通过组或角色)可以授予以下权限
- 访问标准项目
- 通过记录访问受限项目
- 访问所有项目,包括所有受限项目
-
权限分为查看和编辑权限。
- 您可以删除您可以编辑的任何内容
- 可以编辑标准记录的任何人都可以创建记录
-
此外,每个类型都有一个用于管理权限的权限代码,这会在记录上显示访问选项卡
所有权限分配都是通过动态生成的权限代码完成的。这意味着可以分配给组和角色这些权利,并且admin/security/区域可以提供授予的访问权利的完整视图(这与默认CMS权限模型中的SiteTree_Viewers不同)
ACL_(DataClass)_(VIEW|EDIT)_DEFAULT
:标准访问ACL_(DataClass)_(VIEW|EDIT)_RECORD.(RecordID)
:记录特定访问ACL_(DataClass)_(VIEW|EDIT)_ALL
:完全访问ACL_(DataClass)_ACCESS_ADMIN
:管理访问权限
未来开发
此模块是一个初步的概念验证,有许多功能限制,值得解决
- 定义超出查看和编辑的权限。
- 定义集群级别安全性。例如
- 如果你有两个数据对象,类别和物品
- 并且类别与物品有一个多对多的关系
- 那么你可能希望为给定类别的所有物品设置权限
- 根据层次结构定义权限,例如SitTree中找到的。这是基于递归关系的集群级别安全性的特殊形式。
用户界面也远非最佳,重新思考这些控件的语言和呈现方式将非常有价值。
限制
由于权限代码存储为字符串,因此难以有效地创建查询,例如,仅筛选当前成员可以查看的列表。批量查询优化(这是基于canView方法的当前系统另一个问题)不是此模块的设计目标。