gpt4 book ai didi

java - 如何实现 Acl ServiceUtils.getAcl() 以从 Lotus Notes 检索用户信息

转载 作者:行者123 更新时间:2023-12-01 10:08:43 25 4
gpt4 key购买 nike

我正在尝试找到一种方法来获取 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));

}

}

最佳答案

由于没有人回答,我认为这是对我上面的评论的普遍同意,所以我将它们作为答案。

遗憾的是,答案是这并不容易 - 并且对可能的解决方案进行完整的技术处理超出了 StackOverflow 所能完成的范围。

Domino 的设计初衷并不是为了轻松回答“谁是有权阅读或更新此文档的所有用户”这一问题?回答“现在有哪些用户有权在该服务器上读取或更新此文档?”这个问题甚至都不容易回答。要回答这个问题,您必须从有权访问服务器的所有用户的列表开始,将其范围缩小到有权访问数据库的所有用户,并将该组划分为以下组:具有低于 Reader 访问权限的用户、具有以下权限的用户:具有读者访问权限、具有作者访问权限以及具有编辑访问权限或以上权限的用户。这需要查阅 ACL 并解析所引用的一个或多个 Domino 目录中的任何组。然后,您必须检查文档中的所有项目,以确定其中任何项目是否设置了“摘要读访问”或“摘要读/写访问”标志,如果有任何项目,您必须读取名称列表,这可能包括您必须从 ACL 解析的角色和/或您从一个或多个 Domino 目录解析的组。

我将在上面评论的基础上再添加一件事。既然您提到您正在使用 REST API,我认为尝试使用该方法确实是不切实际的。如果我面临这个要求,我只会考虑使用 Notes Java 或 C API 的方法,并且如果交互使用需要信息,我可能会构建一个服务器加载项来预先计算尽可能多的内容尽可能的信息。

关于java - 如何实现 Acl ServiceUtils.getAcl() 以从 Lotus Notes 检索用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36300398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com