如何检查某个用户是不是在根节点上具有 Write, read 权限

Posted

技术标签:

【中文标题】如何检查某个用户是不是在根节点上具有 Write, read 权限【英文标题】:How to get check if a certain user has Write, read permissions on a root node如何检查某个用户是否在根节点上具有 Write, read 权限 【发布时间】:2016-08-02 15:46:27 【问题描述】:

我想编写一个方法,该方法必须返回某个用户能够写入/读取的所有根节点。

目前我正在做以下事情:

public List<String> getAllowedRootPaths(String username) throws RepositoryException 

    SecuritySupport securitySupport = Components.getComponent(SecuritySupport.class);
    UserManager userManager = securitySupport.getUserManager();
    myUser = userManager.getUser(username);
    Session session = MgnlContext.getJCRSession("website");
    List<String> results = new ArrayList<String>();

        if (getRoles().contains("rootPublisher")) 
                //check user access and add to array
        
        return results;
    

    public Collection<String> getRoles() 
       return magnoliaUser.getAllRoles();
    

我的旧方法是使用

HierarchyManager hm = MgnlContext.getHierarchyManager("website");

和测试

hm.isGranted(node.getPath(), Permission.READ)

但由于已弃用,我目前正在寻找另一种解决方案。我知道 Session 对 AccessRights 进行了测试,但我似乎只对用户会话有效。

也许有人知道如何在不手动获取角色并检查 int 值的情况下做到这一点。

您好, 地狱魔王

【问题讨论】:

【参考方案1】:

按照 Ducaz035 的建议,您可以在 AccessManager 上执行 MgnlContext.getAccessManager("website") 并调用 isGranted()。 或者,您可以只调用 PermissionUtil.isGranted(node,permission) 并让该方法自行定位正确的访问管理器。

【讨论】:

【参考方案2】:

AccessManager#isGranted(node.getPath(), Permission.READ)

看起来像你要找的那个。

希望对你有帮助,

干杯

【讨论】:

以上是关于如何检查某个用户是不是在根节点上具有 Write, read 权限的主要内容,如果未能解决你的问题,请参考以下文章

检查 XML 节点是不是具有 Linq C# 的属性?

如何检查模型是不是具有某个列/属性?

如何检查Firebase中是不是存在具有多个字段的节点(子)?

Firebase 实时规则如何检查具有 AutoID 的节点是不是包含正确的数据

检查firebase子项是不是具有特定值[重复]

如何检查用户是不是具有特定角色并因此允许某些操作?