我们被要求在创建文档时设置权限。
基本上编写的代码部分复制如下:
public void onEvent(ObjectChangeEvent event, Id eventId) {
if (event instanceof CreationEvent) {
Document doc = (Document) event.get_SourceObject();
AccessPermissionList permissions = doc.get_Permissions();
String creatorGranteeName = getCreatorGranteeName(doc);
Iterator<AccessPermission> iter = permissions.iterator();
boolean found = false;
while (iter.hasNext()) {
AccessPermission ace = (AccessPermission) iter.next();
if (ace.get_GranteeName().equals(creatorGranteeName)) {
permissions.remove(ace);
// relevant ? is "permission" duplicated ?
doc.set_Permissions(permissions);
break;
}
}
if (!found) return ; // no need to save
doc.save(RefreshMode.REFRESH); // --> triggers CreationEvent -> loop
System.out.println("Saved."); // never reached
}
}
我尝试了两种方法:预处理器或订阅。
预处理器不起作用,因为文档似乎没有完全构建,尤其是关于权限(仅设置了管理员)。获取似乎不起作用(这是可以理解的,因为文档尚未存储)。
如果在线同步处理doc.save()
,无论刷新模式是RefreshMode.REFRESH
还是,订阅都会RefreshMode.NO_REFRESH
崩溃。如果它是异步完成的,它似乎会循环,就像重新doc.save
触发一个CreationEvent
.
因此,如果我做错了什么,我正在寻求帮助,或者如果存在第三种方法。
编辑:添加了块代码,如果没有找到删除权限,则跳过保存。