【问题标题】:Should I grant base.ReadPermissions to Alfresco Consumer?我应该向 Alfresco Consumer 授予 base.ReadPermissions 吗?
【发布时间】:2013-12-11 01:57:36
【问题描述】:
  • 简短的故事:我正在考虑将此操作授予所有消费者。安全方面,这有多愚蠢?

  • 说来话长:

我想使用 OpenCmis API 在给定的 Alfresco 资源上获取用户允许的操作。

这样,我将决定我应该启用或渲染哪些 UI 控件。我创建了一个函数,用于扫描用户对该资源的允许操作并检查给定的操作是否在其中,例如 CAN_CHECK_OUT 或 CAN_GET_CONTENT_STREAM。

我的函数是这样工作的:

private static Boolean canUserPerformAction_(Session cmisSession, String cmisObjId, String actionKey){

    try{
        OperationContext operationContext = new OperationContextImpl();
        operationContext.setIncludeAcls(true);
        CmisObject obj = getResourceById(cmisSession, cmisObjId);

        obj = (CmisObject)cmisSession.getObject(obj, operationContext);

        Acl acl = obj.getAcl();
        AllowableActions actions = obj.getAllowableActions();
        Set<Action> allowedActions = actions.getAllowableActions();


        for(Action act :allowedActions){
            if(actionKey.equals( act.name() ) ){
                return true;
            }
        }
    }catch (Exception e){
        log.debug("Error accessing Object allowed actions | "+e.toString());
    }
    return false;
}

但是对于具有消费者/读取角色的用户,此方法返回错误否定。我花了一些时间才意识到 Action CAN_GET_ACL 绑定了角色 cmis:allbase.ReadPermissions,因此消费者根本无法获取 ACL,因此我的方法将创建一个空的“allowedActions”数组。查看 cmis:mapping 我可以看到:

<cmis:mapping>
          <cmis:key>canGetACL.Object</cmis:key>
          <cmis:permission>cmis:all</cmis:permission>
          <cmis:permission>{http://www.alfresco.org/model/system/1.0}base.ReadPermissions</cmis:permission>
        </cmis:mapping>

一个明显的解决方案是为公司主页上的所有用户启用base.ReadPermissions。但我不确定这是否是解决这个问题的最佳方法,也许我正在打开一些安全漏洞。这会是一个好的解决方案吗?

或者也许我应该找到另一种方法来检查权限?有什么建议么?

感谢您的宝贵时间!

【问题讨论】:

    标签: acl alfresco cmis opencmis


    【解决方案1】:

    我不确定这是否是您的意思,但为什么需要对象的 ACLS?

    您想要启用/禁用操作,因此如果您可以获得 Allowable Actions 就足够了。 为什么您甚至想查看用户/组 x 是否对某个对象具有权限?

    如果您查看Allowable Actions CMIS API 的可能结果,那么您需要知道的一切。还要在operationContext中设置include Actions为true)

    如果您想知道对象的权限以及除了启用/禁用操作之外的其他操作,请使用管理员帐户检查权限并与当前用户进行交叉检查。

    其次:我认为启用权限不会造成伤害,但从长远来看,关于升级等。我不会更改默认权限。然后,我将创建一个具有此权限的自定义权限组,并将其应用于顶层的 EVERYONE 组。

    【讨论】:

    • thanx,这里有很多优点。但是我没有使用您建议的 webScripts API,而是 Apache 化学 OpenCmis,我找不到其他方法来获得允许的操作
    • 好的,但是在 Apache 化学 OpenCMIS 中,您可以定义是否需要原子绑定、json 或 WebService 绑定。所以我想你需要在 CMIS 中进一步挖掘。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 2019-04-13
    • 2018-08-25
    相关资源
    最近更新 更多