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

时间:2013-04-09 14:24:05

标签: permissions liferay liferay-6 administration

环境: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部分中,如下图所示:

Portal Define Permissions

我想将此权限用于特定的portlet,但需要在jsp-hooks或任何其他自定义portlet中使用它。就像我们在ADD_SITE - &gt;中拥有ADD_USERPortal等权限一样General,我希望将这些权限设为通用。

修改
为了使portlet出现在我创建一个简单的自定义portlet的任何部分中,所以portlet出现在Site Application部分中,如果我想要,我也可以将它显示在Control Panel部分中。

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

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

谢谢

1 个答案:

答案 0 :(得分:8)

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

  1. 使用此/resource-actions/custompermission.xml此portlet的权限文件创建自定义portlet,以指定我们想要的不同自定义权限。完整步骤与this wiki相同。
  2. 使此portlet成为隐藏的portlet,以便它不会出现在停靠栏栏的Add菜单中,也不会显示在控制面板中,也不会出现在Define Permissions下拉列表中。
  3. 现在创建一个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
    

    这是它在控制面板中的外观:

    Custom permissions in the Control Panel

    我们可以移动 Portal 部分中的权限,也可以将自定义代码移动到JSP中的该位置。

    上面提到的优势在于,当我们想要为网站角色设置定义权限时,它会显示。

  4. 希望这有助于某人。