Liferay 根据角色隐藏站点

Liferay hide sites depending on roles

在一项要求中,我需要根据用户的角色隐藏一些网站(从右上角的菜单)。

现在,如果用户 X 没有访问网站 ABC 的权限,但他仍然可以在右上角的“我的网站”菜单中看到该网站。当他点击它时,他去了那里,看到消息说你没有被授权。而不是这个,我想隐藏那些用户无权访问的网站。

有什么办法吗?

检查用户是否是站点的成员。如果他不应该访问该网站,请不要让他成为会员。右上角的菜单是根据站点成员资格生成的。

这里是[a link],希望对你有帮助,http://findnerd.com/list/view/Hiding-My-Sites-Menu-in-Docbar-in-Liferay/1940/

更新:

您可以通过创建挂钩从 Liferay Docbar 隐藏 "My Sites" 菜单。在我的例子中,我隐藏了所有用户的菜单选项,除了那些角色是管理员的用户。您需要挂钩 html/taglib/ui/my_sites/page.jsp 添加以下代码,检查登录用户是否为管理员角色。

boolean isAdminUser=permissionChecker.isOmniadmin();

因此,如果登录用户是管理员,我们将显示“我的站点”菜单,否则将隐藏它。我在下面的代码中添加了 isAdminUser 的额外条件。

<c:if test="<%= !mySiteGroups.isEmpty() && isAdminUser %>">

以下是来自 page.jsp

的代码片段
<%@ include file="/html/taglib/init.jsp" %>
<%
String[] classNames = (String[])request.getAttribute("liferay-ui:my_sites:classNames");
String cssClass = GetterUtil.getString((String)request.getAttribute("liferay-ui:my_sites:cssClass"));
boolean includeControlPanel = GetterUtil.getBoolean((String)request.getAttribute("liferay-ui:my_sites:includeControlPanel"));
int max = GetterUtil.getInteger((String)request.getAttribute("liferay-ui:my_sites:max"));
if (max <= 0) {
    max = PropsValues.MY_SITES_MAX_ELEMENTS;
}
List<Group> mySiteGroups = user.getMySiteGroups(classNames, includeControlPanel, max);
boolean isAdminUser=permissionChecker.isOmniadmin();
System.out.println("\n\n\n\n\n\n  isAdminUser \n\n\n\n\n\n"+isAdminUser);
%>
<c:if test="<%= !mySiteGroups.isEmpty() && isAdminUser %>">
    <ul class="taglib-my-sites <%= cssClass %>">
        <%
        PortletURL portletURL = new PortletURLImpl(request, PortletKeys.SITE_REDIRECTOR, plid, PortletRequest.ACTION_PHASE);
        portletURL.setParameter("struts_action", "/my_sites/view");
        portletURL.setPortletMode(PortletMode.VIEW);
        portletURL.setWindowState(WindowState.NORMAL);
        for (Group mySiteGroup : mySiteGroups) {
            String escapedSiteName = HtmlUtil.escape(mySiteGroup.getName());
            boolean showPublicSite = mySiteGroup.isShowSite(permissionChecker, false);
            boolean showPrivateSite = mySiteGroup.isShowSite(permissionChecker, true);
        %>