2016-08-02 2 views
0

Я хочу написать метод, который должен вернуть все корневые узлы, которые определенный пользователь может писать/читать.Как проверить, есть ли у определенного пользователя права {Write, read} на корневом узле

В настоящее время я делаю следующее:

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) 

но так как то будет осуждается настоящее время я ищу для другого решения. Я знаю, что сессия имеет тест для AccessRights, но я считаю, что работает только для пользователей.

Возможно, у кого-то есть идея, как это сделать без ручного захвата Ролей и проверки значений int.

Привет, Hellfiend

ответ

1

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

Похоже, тот, который вы ищете.

Надежда, что помогает,

Приветствия

+0

Работает безупречно, спасибо! – hellfiend

2

Как Ducaz035 предлагаемых вы можете сделать MgnlContext.getAccessManager("website") и вызвать isGranted() на AccessManager.
В качестве альтернативы вы можете просто позвонить PermissionUtil.isGranted(node,permission) и позволить этому методу найти подходящий менеджер доступа.