sminnee/silverstripe-microacl

此包已被弃用,不再维护。未建议替代包。

基于权限代码的Silverstripe实验性ACL系统

安装: 5

依赖者: 0

建议者: 0

安全: 0

星标: 1

关注者: 3

分支: 0

开放问题: 2

类型:silverstripe-vendormodule

0.1.0 2020-08-12 04:14 UTC

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方法的当前系统另一个问题)不是此模块的设计目标。