环境:Liferay 6.1 GA3 EE
我们可以为门户网站定义自定义权限吗?
我们可以通过创建带有<portlet-resource>
标记的XML并在其中定义<action-key>
来在插件portlet中创建自定义权限。
当我在控制面板中为角色定义权限时,我的portlet出现在Site Applications
部分,现在我想要的是在应该具有的portlet或钩子中创建自定义权限(而不是通过EXT)单独的类别为My Custom
,并且应具有自定义权限,例如<action-key>ACCESS_EMAIL</action-key>
,<action-key>ACCESS_TOOLSET<\action-key>
等。
简而言之,当我定义自定义Portal(常规)角色的权限时,我的自定义类别应显示在Portal
部分中,如下图所示:
我想将此权限用于特定的portlet,但需要在jsp-hooks或任何其他自定义portlet中使用它。就像我们在ADD_SITE
- &gt;中拥有ADD_USER
,Portal
等权限一样General
,我希望将这些权限设为通用。
修改
为了使portlet出现在我创建一个简单的自定义portlet的任何部分中,所以portlet出现在Site Application
部分中,如果我想要,我也可以将它显示在Control Panel
部分中。
但现在问题是我在这个portlet中没有任何视图或任何实现,因此我通过更新liferay-display.xml
并将其置于category.hidden
下来隐藏它。这也隐藏了Define Permission
下拉列表。
如果我不使用lifeay-display.xml
liferay,则在从Dockbar中的Undefined
菜单访问时将其置于+Add
类别下。 : - (
谢谢
答案 0 :(得分:8)
这就是我们实现它的方式:
/resource-actions/custompermission.xml
此portlet的权限文件创建自定义portlet,以指定我们想要的不同自定义权限。完整步骤与this wiki相同。Add
菜单中,也不会显示在控制面板中,也不会出现在Define Permissions
下拉列表中。现在创建一个JSP钩子(您可以创建一个单独的插件或在第1点中定义的自定义portlet中包含钩子)并修改/docroot/html/portlet/roles_admin/edit_role_permissions_navigation.jspf
以包含我们的自定义类别:< / p>
<aui:form action="<%= currentURL %>" name="resourceSelection">
<aui:fieldset>
<aui:select changesContext="<%= true %>" name="add-permissions" onchange='<%= renderResponse.getNamespace() + "addPermissions(this);" %>'>
<aui:option label="" />
<%-- Our customization starts here --%>
<%--
We have added our very own option group but this is not required just the <aui:option> will do
--%>
<optgroup label="<liferay-ui:message key="custom" />">
<%
if (_isCustomPermissionsPortlet(CUSTOM_PERMISSIONS_PORTLET)) {
editPermissionsURL.setParameter("portletResource", CUSTOM_PERMISSIONS_PORTLET);
editPermissionsURL.setParameter("showModelResources", "0");
%>
<%--
and here we add our own Permission category drop-down option
--%>
<aui:option label="custom-permissions"
selected="<%= _isCurrent(editPermissionsURL.toString(), portletResource, showModelResources) %>"
value="<%= editPermissionsURL.toString() %>" />
<%
}
%>
</optgroup>
<%-- Our customization ends here --%>
<c:choose>
<c:when test="<%= role.getType() == RoleConstants.TYPE_SITE %>">
<optgroup label="<liferay-ui:message key="administration" />">
<% // Other liferay stuff continues ...
在JSP结束时我们有:
// ... other liferay stuff
private boolean _isOrganizationPortlet(String portletId) {
return ArrayUtil.contains(_ORGANIZATION_PORTLETS, portletId);
}
private boolean _isPortalPortlet(String portletId) {
return ArrayUtil.contains(_PORTAL_PORTLETS, portletId);
}
// Our customization starts here
// portlet's ID
public static final String CUSTOM_PERMISSIONS_PORTLET = "CustomPermissions_WAR_CustomPermissionsportlet";
private static final String[] _CUSTOM_PERMISSIONS_PORTLET = {
CUSTOM_PERMISSIONS_PORTLET,
};
private boolean _isCustomPermissionsPortlet(String portletId) {
return ArrayUtil.contains(_CUSTOM_PERMISSIONS_PORTLET, portletId);
}
// Our customization ends here
这是它在控制面板中的外观:
我们可以移动 Portal
部分中的权限,也可以将自定义代码移动到JSP中的该位置。
上面提到的优势在于,当我们想要为网站角色设置定义权限时,它会显示。
希望这有助于某人。