oat-sa/extension-tao-dac-simple

允许管理员向其他人提供某些资源的访问权限的扩展

安装次数: 73,048

依赖项: 1

建议者: 0

安全: 0

星标: 5

关注者: 49

分支: 3

开放问题: 1

类型:tao-extension

v8.0.5 2024-04-15 17:36 UTC

This package is auto-updated.

Last update: 2024-09-03 13:53:15 UTC


README

codecov

简单数据访问控制允许限制哪些用户可以访问哪些资源,与高级搜索兼容。

访问权限可以直接授予用户或角色,适用于拥有该特定角色的所有用户。

权限是按资源分配的,因此要取消对某个类中所有项目的写访问权限,需要在保存更改之前递归地应用新的访问权限,并勾选“递归”。

权限是可累加的,这意味着如果

  • 角色A对项目1有写和读访问权限
  • 用户X对项目1有读访问权限
  • 并且用户X拥有角色A

则用户X将对项目1有读和写访问权限

如何启用ACL管理

为了在后台面板上看到“访问控制”按钮,需要进行一些更改。

在此启用操作

修改actions/structures.xml文件,在actions节点中添加属性allowClassActions="true"

<?xml version="1.0" encoding="utf-8"?>
<structures>
    <structure>
        <sections>
            <section>
                <trees><!-- Something here --></trees>
                <actions allowClassActions="true">
                    <action><!-- Something here --></action>
                </actions>
            </section>
        </sections>
    </structure>
</structures>

在端点上启用ACL

添加具有正确fieldgrant levelrequiresRight注释以检查权限

class MyController extends tao_actions_SaSModule
{
    /**
     * @requiresRight id READ
     */
    public function editInstance()
    {
      //...
    }
}

在端点中内部(不使用注释)检查ACL

如果扩展tao_actions_RdfController,我们可以使用hasWriteAccess方法

class MyController extends tao_actions_SaSModule
{
    public function editItem()
    {
        $item = $this->getCurrentInstance();
            
        if ($this->hasWriteAccess($item->getUri())) {
            // Do something
        }
    }
}

或者我们可以直接使用DataAccessControl实现

$user = $this->getSession()->getUser();
$item = $this->getCurrentInstance();
$dataAccessControl = new \oat\tao\model\accessControl\data\DataAccessControl();

$canWrite = $dataAccessControl->hasPrivileges($user, [$item->getUri() => 'WRITE']);
$canRead = $dataAccessControl->hasPrivileges($user, [$item->getUri() => 'READ']);

权限保存策略

目前,我们有以下保存/传播权限策略

重要:使用递归选项保存权限非常危险,因为这会覆盖所有子类和资源的权限。

权限策略在此配置config/taoDacSimple/PermissionsService.conf.php。示例

<?php
return new oat\taoDacSimple\model\PermissionsServiceFactory(
    [
        'save_strategy' => 'oat\\taoDacSimple\\model\\SyncPermissionsStrategy',
        'recursive_by_default' => false
    ]
);

环境变量