如何在liferay结构中添加字段权限?

时间:2015-12-08 05:19:21

标签: liferay liferay-6

我已在 LR 6.2.4 CE 中为网络内容创建了一个包含5个字段(ddm-textarea)的结构。

我的要求:

在5个字段中,我希望向所有用户显示3个字段,但我必须向不同的用户组(不同的用户组)显示第4和第5个字段。

我的问题:

是否可以获得字段级别权限?我知道创建自定义字段,但我不确定是否可以为权限验证注入条件。

我已经在模板级别创建了权限检查,我可以在其中显示基于用户组的字段,但是当用户编辑该内容时,他会看到所有字段(我们不想要)。

注意: 所有用户都应该拥有所有网络内容的编辑权限,并且应该只能查看和编辑他们拥有权限的字段。

1 个答案:

答案 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- +角色名称+ - +某个可选后缀,则会检查当前用户是否具有给定角色。您可以使用其他来源进行此配置,但我想您明白了。