как реализовать AclServiceUtils.getAcl() для получения информации о пользователе из lotusnotes

Я пытаюсь найти способ получить полный список пользователей для документа Lotus Notes. Я не могу получить пользователей и отобразить их разрешения в openCMIS.

Кто-нибудь знает, как получить полный ACL каждого пользователя для конкретного документа?

 public class AclServiceUtils {
 private static final Logger LOGGER = LoggerFactory.getLogger(AclServiceUtils.class);

public static Acl getAcl(Session session, String objectId, Boolean onlyBasicPermissions) throws IOException {


    ObjectIdentity objId = ObjectIdentity.getObjectIdentity(objectId);

    try {     
        AccessControlListImpl acl = new AccessControlListImpl();
        List<Ace> aces = new ArrayList<Ace>();

        PrincipalImpl principal=new  PrincipalImpl();

       principal.setId(objId.getType() + " ");
       // here we want info of user
            AccessControlEntryImpl ace = new AccessControlEntryImpl();
            ace.setDirect(true);
            ace.setPrincipal(principal);
            aces.add(ace);
          acl.setAces(aces);
        return acl;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

}

public class ObjectIdentity {
@JsonIgnore
private static final ObjectMapper mapper = new ObjectMapper();
@JsonIgnore
private static final String UTF_8 = "UTF-8";

private ObjectIdentityType type;
private String unid;
private String id;
private String parentFolderPath;

public ObjectIdentityType getType() {
    return type;
}

public void setType(ObjectIdentityType type) {
    this.type = type;
}

public String getUnid() {
    return unid;
}

public void setUnid(String unid) {
    this.unid = unid;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getParentFolderPath() {
    return parentFolderPath;
}

public void setParentFolderPath(String parentId) {
    this.parentFolderPath = parentId;
}

@JsonIgnore
public String getEncodedObjectId() throws IOException {
    String json = mapper.writeValueAsString(this);
    byte[] encodeBase64 = Base64.encode(json);
    String result = new String(encodeBase64);
    result = URLEncoder.encode(result, UTF_8);
    return result;
}

@JsonIgnore
public static ObjectIdentity getObjectIdentity(String encodedString)
        throws IOException {
    String decodedString = URLDecoder.decode(encodedString, UTF_8);
    byte[] decodeBase64 = Base64.decode(decodedString);
    String result = new String(decodeBase64);
    return mapper.readValue(result, ObjectIdentity.class);
}

public static void main(String args[]) throws IOException{
    ObjectIdentity identity = new ObjectIdentity();
    identity.setId("<1__=EABBF5CEDFB501988f9e8a93df93869091@local>");
    identity.setUnid("DEF");
    identity.setType(ObjectIdentityType.ATTACHMENT);


    ObjectIdentity decoded = ObjectIdentity.getObjectIdentity(identity.getEncodedObjectId());
    /*System.out.println(decoded.id);
    System.out.println(decoded.unid);
    System.out.println(decoded.type);*/

    System.out.println(decoded.id.equals(identity.id));

}

}


person Chittiraju Chitturi    schedule 30.03.2016    source источник
comment
Какую информацию о пользователе вы хотите получить из IBM Notes Domino?   -  person Knut Herrmann    schedule 30.03.2016
comment
Относительно прав доступа   -  person Chittiraju Chitturi    schedule 30.03.2016
comment
Документ Notes может иметь поля читателей и авторов. Они могут содержать имена пользователей, имена групп и роли. В ACL базы данных перечислены все пользователи и группы пользователей с их конкретными правами и ролями. Итак, что именно вам нужно? Все пользователи, которые могут читать или обновлять определенный документ?   -  person Knut Herrmann    schedule 30.03.2016
comment
Да, мне нужны пользователи, которые могут читать и обновлять определенный документ.   -  person Chittiraju Chitturi    schedule 30.03.2016
comment
Мы используем интерфейс Domino Access Services на основе REST для доступа к серверу Domino.   -  person Chittiraju Chitturi    schedule 30.03.2016
comment
Domino не был разработан, чтобы упростить ответ на вопрос Кто все пользователи, имеющие доступ для чтения или обновления этого документа? Непросто даже ответить на вопрос Кто все пользователи, имеющие доступ для чтения или обновления этого документа на этом сервере прямо сейчас? Чтобы ответить на него, вы должны начать со списка всех пользователей, которые имеют доступ к серверу, узкий список всех пользователей, которые имеют доступ к базе данных, и разделить эту группу на эти группы: те, у кого меньше доступа, чем Reader, те, с доступом для чтения, с доступом для авторов и с доступом для редактора или выше.   -  person Richard Schwartz    schedule 30.03.2016
comment
Это требует обращения к ACL и разрешения любых групп в одном или нескольких каталогах Domino, на которые есть ссылки. И затем вы должны изучить все элементы в документе, чтобы определить, имеют ли какие-либо из них установленные флаги SUMMARY READ ACCESS или SUMMARY READ/WRITE ACCESS, и если какой-либо из них вам нужно прочитать списки имен, которые могут включают роли, которые вы должны разрешать из ACL, и/или группы, которые вы разрешаете из одного или нескольких каталогов Domino.   -  person Richard Schwartz    schedule 30.03.2016


Ответы (1)


Поскольку никто не ответил, я принимаю это как общее согласие с моими комментариями выше, поэтому я предложу их в качестве ответа.

К сожалению, ответ заключается в том, что это непросто, и полная техническая обработка возможных решений выходит за рамки того, что можно сделать с помощью StackOverflow.

Domino не был разработан, чтобы легко ответить на вопрос «Кто все пользователи, у которых есть доступ для чтения или обновления этого документа»? Непросто даже ответить на вопрос «Кто все пользователи, которые имеют доступ для чтения или обновления этого документа на этом сервере прямо сейчас?» Чтобы ответить на него, вы должны начать со списка всех пользователей, которые имеют доступ к серверу, узкий список всех пользователей, которые имеют доступ к базе данных, и разделить эту группу на эти группы: те, у кого меньше доступа, чем Reader, те, с доступом для чтения, с доступом для авторов и с доступом для редактора или выше. Это требует обращения к ACL и разрешения любых групп в одном или нескольких каталогах Domino, на которые есть ссылки. И затем вы должны изучить все элементы в документе, чтобы определить, имеют ли какие-либо из них установленные флаги SUMMARY READ ACCESS или SUMMARY READ/WRITE ACCESS, и если какой-либо из них вам нужно прочитать списки имен, которые могут включают роли, которые вы должны разрешать из ACL, и/или группы, которые вы разрешаете из одного или нескольких каталогов Domino.

Я добавлю еще одну вещь к тому, что я прокомментировал выше. Поскольку вы упомянули, что используете REST API, я думаю, что было бы действительно непрактично использовать этот подход. Если бы я столкнулся с этим как с требованием, я бы рассматривал только подходы с использованием API Notes Java или C, и если информация нужна для интерактивного использования, я бы, вероятно, создал серверную надстройку, которая предварительно вычисляет столько же, сколько информацию насколько это возможно.

person Richard Schwartz    schedule 01.04.2016