我试图找到一种获取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));
}
}
答案 0 :(得分:1)
由于没有人回答,我将此视为与上述评论达成一致意见,因此我会将其作为答案提供。
可悲的是,答案是它并不容易 - 对可能的解决方案进行全面的技术处理超出了StackOverflow可以实现的范围。
Domino不是为了轻松回答问题而设计的。#34;谁是有权阅读或更新此文档的所有用户&#34;?回答这个问题并不容易。#34;现在有权访问此服务器上读取或更新此文档的所有用户是谁?&#34;要回答这个问题,您必须从有权访问服务器的所有用户列表开始,对于有权访问数据库的所有用户,将该组划分为这些组:读取访问权限少于那些组的用户,使用Reader,访问权限,具有作者访问权限的访问权限,以及具有“编辑者”访这需要咨询ACL并解析引用的一个或多个Domino目录中的任何组。然后你必须检查文档中的所有项目,以确定它们中是否有任何一个具有SUMMARY READ ACCESS或SUMMARY READ / WRITE ACCESS标志集,如果它们中的任何一个,你必须阅读名称列表,这可能是包括必须从ACL解析的角色,和/或从一个或多个Domino目录中解析的组。
我将在上面评论的内容中再添加一个内容。既然你提到你正在使用REST API,我认为尝试使用这种方法是不切实际的。如果我将此作为一项要求,我只会考虑使用Notes Java或C API的方法,如果交互使用需要这些信息,我可能会构建一个预先计算为的服务器加载项尽可能多的信息。