CMIS ACL удалить разрешение только пользователя (на Alfresco) - PullRequest
0 голосов
/ 01 октября 2018

У меня возникают проблемы, когда я хочу удалить разрешение от одного пользователя, используя метод openCMIS Acl removeAcl (List removeAces, AclPropagation aclPropagation).

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

Это код, который я использую для удаления пользователя:

    OperationContext operationContext = new OperationContextImpl();
    operationContext.setIncludeAcls(true);
    Folder testFolder = (Folder) session.getObject("72deb421-3b8e-4268-9987-9c59a19f4a13");
    testFolder = (Folder) session.getObject(testDoc, operationContext);
    List<String> permissions = new ArrayList<String>();
    permissions.add("{http://www.alfresco.org/model/content/1.0}folder.Coordinator");
    String principal = "peter.sts";
    Ace aceIn = session.getObjectFactory().createAce(principal, permissions);
    List<Ace> aceListIn = new ArrayList<Ace>();
    aceListIn.add(aceIn);
    testDoc.removeAcl(aceListIn, AclPropagation.REPOSITORYDETERMINED);
    testDoc = (Folder) session.getObject(testDoc, operationContext);here

У меня есть этот пользователь с этим разрешением, связанным с папкойи хочу удалить, но только этого пользователя.

permissions.add ("{http://www.alfresco.org/model/content/1.0}folder.Coordinator");

String Principal =" peter.sts ";

Когда я запускаю метод, все пользователи с разрешениями связываются с папкойудаляются.

Что я делаю не так?

1 Ответ

0 голосов
/ 05 октября 2018

Вам не нужно создавать экземпляр ACE, если вам нужно только удалить запись.Пример:

public void doExample() {
    OperationContext oc = new OperationContextImpl();
    oc.setIncludeAcls(true);
    Folder folder = (Folder) getSession().getObject("workspace://SpacesStore/5c8251c3-d309-4c88-a397-c408f4b34ed3", oc);

    // grab the ACL
    Acl acl = folder.getAcl();

    // dump the entries to sysout
    dumpAcl(acl);

    // iterate over the ACL Entries, removing the one that matches the id we want to remove
    List<Ace> aces = acl.getAces();
    for (Ace ace : aces) {
        if (ace.getPrincipalId().equals("tuser2")) {
            aces.remove(ace);
        }
    }

    // update the object ACL with the new list of ACL Entries
    folder.setAcl(aces);

    // refresh the object
    folder.refresh();

    // dump the acl to show the update
    acl = folder.getAcl();
    dumpAcl(acl);
}

public void dumpAcl(Acl acl) {
    List<Ace> aces = acl.getAces();
    for (Ace ace : aces) {
        System.out.println(String.format("%s has %s access", ace.getPrincipalId(), ace.getPermissions()));
    }
}

Выполнение этого для папки с тремя пользователями tuser1 / 2/3, каждый из которых имеет доступ к соавтору, возвращает:

GROUP_EVERYONE has [{http://www.alfresco.org/model/content/1.0}cmobject.Consumer] access
tuser1 has [{http://www.alfresco.org/model/content/1.0}cmobject.Collaborator] access
tuser2 has [{http://www.alfresco.org/model/content/1.0}cmobject.Collaborator] access
tuser3 has [{http://www.alfresco.org/model/content/1.0}cmobject.Collaborator] access
GROUP_EVERYONE has [{http://www.alfresco.org/model/content/1.0}cmobject.Consumer] access
tuser1 has [{http://www.alfresco.org/model/content/1.0}cmobject.Collaborator] access
tuser3 has [{http://www.alfresco.org/model/content/1.0}cmobject.Collaborator] access
...