在一个要求中,我需要隐藏一些网站(从右上角菜单),具体取决于用户的角色。
现在,如果用户X无法访问网站ABC,但他仍然可以在右上角的“我的网站”菜单中看到该网站。当他点击它时,他去那里看到消息说你没有被授权。而不是这个,我想隐藏那些用户无法访问的网站。
有没有办法这样做?
答案 0 :(得分:1)
检查用户是否是网站的成员。如果他不能访问该网站,请不要让他成为会员。右上角的菜单是根据站点成员身份生成的。
答案 1 :(得分:0)
这是[链接],我希望这会对你有帮助,http://findnerd.com/list/view/Hiding-My-Sites-Menu-in-Docbar-in-Liferay/1940/
更新:
您可以通过创建挂钩来隐藏Liferay Docbar中的“我的网站”菜单。在我的示例中,我隐藏了除了角色为Administrator的用户之外的所有用户的菜单选项。你需要钩住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);
%>