2016-03-30 4 views
0

Ich versuche, einen Weg zu finden, um die vollständige Benutzerliste für ein Lotus Notes-Dokument zu erhalten. Ich kann die Benutzer nicht abrufen und ihre Berechtigungen in openCMIS anzeigen.wie AclServiceUtils.getAcl() zu implementieren, um Benutzerinformationen aus Lotus Notes abrufen

Kann jemand die komplette ACL jedes Benutzers für ein bestimmtes Dokument erhalten?

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("<[email protected]>"); 
    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)); 

} 

}

+1

Welche Art von Benutzerinformationen möchten Sie von IBM Notes Domino abrufen? –

+0

Zu Zugriffsberechtigungen –

+1

Ein Notes-Dokument kann Leser- und Autorenfelder enthalten. Sie können Benutzernamen, Gruppennamen und Rollen enthalten. Die ACL der Datenbank listet alle Benutzer und Benutzergruppen mit ihren spezifischen Rechten und Rollen auf. Also, was brauchst du genau? Alle Benutzer, die ein bestimmtes Dokument lesen oder aktualisieren können? –

Antwort

1

Da niemand geantwortet hat, ich nehme das als allgemeine Übereinstimmung mit meinen Kommentaren oben, also werde ich sie als eine Antwort bieten.

Leider ist die Antwort nicht einfach - und eine vollständige technische Behandlung möglicher Lösungen geht über StackOverflow hinaus.

Domino wurde nicht entwickelt, um die Frage "Wer sind alle Benutzer, die Zugriff auf dieses Dokument haben, um es zu lesen oder zu aktualisieren", einfach zu beantworten. Es ist nicht einmal einfach, die Frage zu beantworten: "Wer sind alle Benutzer, die dieses Dokument auf diesem Server lesen oder aktualisieren können?" Um dies zu beantworten, müssen Sie mit einer Liste aller Benutzer beginnen, die Zugriff auf den Server haben, die für alle Benutzer, die Zugriff auf die Datenbank haben, eingrenzen und diese Gruppe in diese Gruppen aufteilen: diejenigen mit weniger als Reader-Zugriff mit Reader, Zugriff, mit Autorenzugriff und mit Editorzugriff oder höher. Dazu müssen Sie die ACL abfragen und Gruppen in einem oder mehreren Domino-Verzeichnissen auflösen, auf die verwiesen wird. Und dann müssen Sie alle Elemente in dem Dokument untersuchen, um festzustellen, ob einige von ihnen die Flags SUMMARY READ ACCESS oder SUMMARY READ/WRITE ACCESS gesetzt haben, und wenn einer von ihnen die Names-Listen lesen muss, die möglicherweise Fügen Sie Rollen hinzu, die Sie aus der ACL auflösen müssen, und/oder Gruppen, die Sie aus einem oder mehreren Domino-Verzeichnissen auflösen.

Ich füge eine weitere Sache zu dem hinzu, was ich oben kommentiert hatte. Da Sie erwähnt haben, dass Sie die REST-APIs verwenden, denke ich, dass es wirklich unpraktisch wäre, dies mit diesem Ansatz zu versuchen. Wenn ich dies als eine Anforderung betrachten würde, würde ich nur Ansätze in Betracht ziehen, die die Notes Java- oder C-APIs verwenden, und wenn die Informationen für die interaktive Verwendung benötigt werden, würde ich wahrscheinlich ein Server-Add-In erstellen, das soviel vorberechnet die Informationen wie möglich.