【问题标题】:Liferay - How to hide/show button by checking user permissionLiferay - 如何通过检查用户权限来隐藏/显示按钮
【发布时间】:2014-06-05 06:23:34
【问题描述】:

我有一个托管在 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 权限,它也总是返回 true。如果我传递了我的配置本身不存在的权限,则上述检查仅返回 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>

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

提前致谢。

【问题讨论】:

  • 另外,如果我使用 Liferay SVN 存储库中的以下代码,无论用户是否有权访问,我总是正确的。

标签: permissions liferay-6


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您所做的方式是正确的。它应该可以工作我不知道为什么会发生..

    如下操作

    创建一个角色。

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

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

    现在将角色分配给任何用户。

    使用您分配的角色的用户登录现在测试 portlet 功能..

    参考以下链接

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

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

    【讨论】:

    • 嗨米拉,感谢您的回复。我尝试了与您建议的相同的方法。创建了一个新角色并创建了一个新的普通用户。将权限分配给角色,然后将角色分配给用户。我在权限检查中仍然是正确的。
    • 在文档中,我还看到必须使用以下方法添加资源,但由于我不想对我的任何文件或 java 类应用权限,我认为我不需要添加资源。这种理解是否正确。 public void addResources(long companyId, long groupId, long userId, String name, String primKey, boolean portletActions, boolean addGroupPermissions, boolean addGuestPermissions)
    【解决方案3】:

    您可以尝试使用 ResourcePermissionLocalServiceUtil 类而不是使用权限检查器,您可能会找到很多方法..

    【讨论】:

      猜你喜欢
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多