2015-12-08 35 views
0

我为LR 6.2.4 CE中的网页内容创建了一个包含5个字段(ddm-textarea)的结构。如何在liferay结构中的字段上添加权限?

我的要求:

出了5场,我希望显示3场的所有用户,但我必须表明第4和第5场不同的用户组(不同的用户组) 。

我的问题:

是否有可能有一个字段级别的权限?我知道创建一个自定义字段,但我不确定是否可以注入一个权限验证的条件。

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

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

回答

1

没有这样的开箱即用功能。您将需要挂钩分机插件来更改字段的生成。

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

+0

感谢您分享您的想法!我尝试了相同的功能,并且能够从ddmFields列表中删除该字段,但仍然获取了Web内容用户界面中的所有字段(即使是已删除的字段)。它的奇怪,但我仍然试图了解这一点。你能想到这种行为的原因吗? – anjhawar