Liferay - 如何通过检查用户权限隐藏/显示按钮

时间:2014-06-05 06:23:35

标签: permissions liferay-6

我在liferay门户网站上托管了一个Web应用程序。某些功能,例如仅根据liferay中定义的自定义权限为某些用户显示保存按钮。

我已使用引用来配置xml文件中的权限,如下所示 http://www.liferay.com/community/wiki/-/wiki/Main/Permissioning+in+Plugin+Environment#section-Permissioning+in+Plugin+Environment-DEFINING+PERMISSION+FOR+A+PORTLET+RESOURCE+IN+PLUGIN+ENVIRONMENT

<?xml version="1.0"?>
<resource-action-mapping>
    <portlet-resource>
        <portlet-name>TESTPortlet</portlet-name>
                <permissions>
        <supports>
            <action-key>SEARCH_BUTTON</action-key>
            <action-key>SAVE_BUTTON</action-key>
            <action-key>DELETE_BUTTON</action-key>
        </supports> 
         </permissions>
    </portlet-resource>
</resource-action-mapping>

我可以在我的portlet下的门户网站的权限选项卡中看到上述权限。我还为其中一个用户角色分配了SAVE_BUTTON权限(TEST_ADMIN是我的角色)。

如果登录用户具有SAVE_BUTTON权限,如何签入我的jsp或java。

我尝试使用以下代码进行访问检查。

<c:if test="<%= PortletPermissionUtil.contains(permissionChecker,plid.longValue(), "TESTPortlet_WAR_TESTPortlet5121","SAVE_BUTTON") %>">

然而,即使我在上面的检查中通过了SEARCH_BUTTON permisison,它也总是让我回报。如果我传递了配置本身不存在的权限,则上面的检查仅返回false。我猜上面的检查是知道权限是否在portlet中可用,并且不在用户访问级别。

另外,如果我使用Liferay SVN repo中的以下代码,我总是将值设为是。

%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<%@ taglib uri="http://liferay.com/tld/security" prefix="liferay-security" %>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>

<portlet:defineObjects />

<liferay-theme:defineObjects />

<%
long groupId = scopeGroupId;
String name = portletDisplay.getRootPortletId();
String primKey = portletDisplay.getResourcePK();
String actionId = "ADD_SOMETHING";
%>

Do you have the <i><liferay-ui:message key='<%= "action." + actionId %>' /></i> permission for this portlet?

<strong>

<c:choose>
    <c:when test="<%= permissionChecker.hasPermission(groupId, name, primKey, actionId) %>">
        Yes
    </c:when>
    <c:otherwise>
        No
    </c:otherwise>
</c:choose>

</strong>

任何人都可以提供帮助,如何检查登录用户是否可以访问特定权限,以便我可以隐藏或显示我的按钮。

提前致谢。

3 个答案:

答案 0 :(得分:1)

我现在可以使用权限了。之前的问题是,我将我的portlet添加到用户公共页面,似乎所有权限都默认继承给用户。

将portlet移动到社区页面并为用户提供社区角色后,我的上述代码开始按预期工作。

答案 1 :(得分:0)

你做的方式是正确的。应该工作我不知道为什么会发生..

执行以下操作

创建一个角色。

定义您创建的角色的权限。当应用程序中的define权限选择您的portlet名称时,您可以看到您在xml文件中配置的所有操作。

根据您的行为定义角色权限。

现在为任何用户分配角色。

使用您指定角色的用户登录,现在测试portlet功能..

参考以下链接

https://www.liferay.com/documentation/liferay-portal/6.1/development/-/ai/security-and-permissio-4

请查看LiferaySavvy.com了解更多关于liferay的内容

答案 2 :(得分:0)

而不是使用权限Checker可以尝试使用ResourcePermissionLocalServiceUtil类,可能有很多方法可以找到..