7

环境:Liferay 6.1 GA3 EE

我们可以为门户定义自定义权限吗?

我们可以通过创建带有<portlet-resource>标签的 XML 并在其中定义来在我们的插件 portlet 中创建自定义权限<action-key>

当我在控制面板中为角色定义权限时,我的 portlet 出现在部分Site Applications中,现在我想要的是在 portlet 或钩子中创建自定义权限(而不是通过 EXT),它应该有一个单独的类别,My Custom并且应该有自定义之类<action-key>ACCESS_EMAIL</action-key>的权限<action-key>ACCESS_TOOLSET<\action-key>

简而言之Portal,当我为自定义门户(常规)角色定义权限时,我的自定义类别应出现在如下图所示的部分中:

门户定义权限

我不想将此权限用于特定的 portlet,但需要在 jsp-hooks 或我的任何其他自定义 portlet 中使用它。就像我们在-->中拥有ADD_SITE, ADD_USERetc 权限一样,我希望这些权限是通用的。PortalGeneral

编辑
为了使 portlet 出现在任何部分中,我创建了一个简单的 custom-portlet,因此 portlet 出现在Site Application部分中,如果我愿意,我也可以让它出现在Control Panel部分中。

但现在的问题是我在这个 portlet 中没有任何视图或任何实现,所以我通过更新liferay-display.xml并将其置于category.hidden. 这也将其从Define Permission下拉列表中隐藏。

如果我不使用liferay,则在从停靠栏中的菜单访问它时lifeay-display.xml将其置于类别下。:-(Undefined+Add

谢谢你

4

1 回答 1

8

这就是我们实现它的方式:

  1. 使用此 Portlet 的权限文件创建一个自定义 Portlet,例如/resource-actions/custompermission.xml指定我们想要的不同自定义权限。完整的步骤与此 wiki相同。
  2. 使这个 portlet 成为隐藏的 portlet,这样它就不会出现在Add停靠栏的菜单中,既不会出现在控制面板中,也不会出现在下拉菜单中Define Permissions
  3. 现在创建一个 JSP 钩子(您可以创建一个单独的插件或将钩子包含在第 1 点定义的自定义 portlet 中)并修改/docroot/html/portlet/roles_admin/edit_role_permissions_navigation.jspf以包含我们的自定义类别:

    <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 中的该位置来移动该部分中的权限。

    上面有它的好处是,当我们要为站点角色设置定义权限时,它会显示出来。

希望这可以帮助某人。

于 2013-04-25T07:23:19.640 回答