我已在 LR 6.2.4 CE 中为网络内容创建了一个包含5个字段(ddm-textarea
)的结构。
我的要求:
在5个字段中,我希望向所有用户显示3个字段,但我必须向不同的用户组(不同的用户组)显示第4和第5个字段。
我的问题:
是否可以获得字段级别权限?我知道创建自定义字段,但我不确定是否可以为权限验证注入条件。
我已经在模板级别创建了权限检查,我可以在其中显示基于用户组的字段,但是当用户编辑该内容时,他会看到所有字段(我们不想要)。
注意: 所有用户都应该拥有所有网络内容的编辑权限,并且应该只能查看和编辑他们拥有权限的字段。
答案 0 :(得分:1)
没有开箱即用的功能。您将需要 hook 或 ext插件来更改字段的生成。
这些字段在JournalConverter
中读取,您可以使用自己的实现覆盖这些字段,并在getDDMFields()
中检查权限。但这意味着,当文章被保存时,那些不可见的字段会被丢弃 - 我猜这不是你想要的。
因此,您必须覆盖文章内容转换为字段的html/portlet/journal/article/content.jsp
:
Fields ddmFields = null;
if ((article != null) && Validator.isNotNull(article.getStructureId())
&& Validator.isNotNull(content)) {
ddmFields = JournalConverterUtil.getDDMFields(ddmStructure, content);
}
现在您可以直接添加权限检查:
Fields ddmFields = null;
if ((article != null) && Validator.isNotNull(article.getStructureId())
&& Validator.isNotNull(content)) {
ddmFields = JournalConverterUtil.getDDMFields(ddmStructure, content);
for (Field field : ddmFields) {
if (field.getName().startsWith("restrict-")) {
String role = field.getName().replaceAll("restrict-(.+)(-.*)?", "$1");
if (!request.isUserInRole(role)) {
ddmFields.remove(field.getName());
}
}
}
}
我已使用字段名称轻松配置字段限制。如果某个字段的名称为restrict-
+角色名称+ -
+某个可选后缀,则会检查当前用户是否具有给定角色。您可以使用其他来源进行此配置,但我想您明白了。