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

时间:2016-08-02 15:46:28

标签: java magnolia

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

目前我正在做以下事情:

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有一个测试,但我似乎只适用于useression。

也许有人有一个想法如何做到这一点,而无需手动抓取角色并检查int值。

问候, Hellfiend

2 个答案:

答案 0 :(得分:2)

正如Ducaz035建议您可以MgnlContext.getAccessManager("website")并在AccessManager上调用isGranted()
或者,您只需调用PermissionUtil.isGranted(node,permission)并让该方法找到适当的访问管理器本身。

答案 1 :(得分:1)

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

看起来就像你正在寻找的那个。

希望有所帮助,

干杯