Foros de discusión

Sub menu displaying even though the user doesn't have permissions

thumbnail
William Gosse, modificado hace 8 años.

Sub menu displaying even though the user doesn't have permissions

Liferay Master Mensajes: 533 Fecha de incorporación: 4/07/10 Mensajes recientes
I've created a custom theme but I have one small issue. If I add a sub page to a page it displays just fine in the menu and works correctly. However when I set permissions for a specific role and a user who doesn't hat the role logs in the sub page still appears on the sub menu. Click on the link produces a resource not found error, which kind of makes sense. What doesn't make sense is why the sub page is being displayed on the sub menu for this user. The top level menu seems works correctly in terms of permission. Pages that a user is not authorized to see don't appear on the menu.

Here's how I'm building the sub menu:
#if ($layout.hasChildren())
<ul class="moasisSubMenu" role="menu">
#foreach ($nav_child in $layout.getChildren())
#set ($nav_child_attr_selected="")
#set ($nav_child_css_class = "false")

#if ($nav_child.isSelected())
#set ($nav_child_attr_selected="aria-selected='true'")
#set ($nav_child_css_class = "selected")
#end

<li style="list-style: none;" class="$nav_child_css_class" id="layout_$nav_child.getLayoutId()" $nav_child_attr_selected role="presentation">
<a aria-labelledby="layout_$nav_child.getLayoutId()" href="$nav_child.getFriendlyURL($theme_display.getLocale())" $nav_child.getTarget() role="menuitem">$nav_child.getName()</a>
</li>
#end
</ul>
#end
thumbnail
Travis Cory, modificado hace 8 años.

RE: Sub menu displaying even though the user doesn't have permissions

Junior Member Mensajes: 73 Fecha de incorporación: 4/06/13 Mensajes recientes
Hello William,

Thank you for your question. I was taking a quick look at your code and I noticed that you are not making a check for the specific role or permission you mentioned. One option is to create a variable in your init_custom.vm to check if that user has specific role or permission. You have access to the $user object so you could use the API to check for the permission or role. Something like
#set ($user_role_ids = $user.getRoleIds())
#set ($my_role_id = 1234)
#set ($user_has_role = false)

#if ($listTool.arrayContains($user_role_ids, $my_role_id)) 
	#set ($user_has_role = true)
#end

#if ($user_has_role)
	#if ($layout.hasChildren())
	<ul class="moasisSubMenu" role="menu">
		#foreach ($nav_child in $layout.getChildren())
			#set ($nav_child_attr_selected="")
			#set ($nav_child_css_class = "false")

			#if ($nav_child.isSelected())
				#set ($nav_child_attr_selected="aria-selected='true'")
				#set ($nav_child_css_class = "selected")
			#end 

			<li style="list-style: none;" class="$nav_child_css_class" id="layout_$nav_child.getLayoutId()" $nav_child_attr_selected role="presentation">
			<a aria-labelledby="layout_$nav_child.getLayoutId()" href="$nav_child.getFriendlyURL($theme_display.getLocale())" $nav_child.gettarget() role="menuitem">$nav_child.getName()</a>
			</li>
		#end
	</ul>
	#end
#end
thumbnail
William Gosse, modificado hace 8 años.

RE: Sub menu displaying even though the user doesn't have permissions (Respuesta)

Liferay Master Mensajes: 533 Fecha de incorporación: 4/07/10 Mensajes recientes
Actually I was able to solve this by a adding a PermissionChecker to the mix:
#set($permissionChecker=$theme_display.getPermissionChecker())

#if ($layout.hasChildren())
<ul class="moasisSubMenu" role="menu">
#foreach ($nav_child in $layout.getChildren($permissionChecker))
#set ($nav_child_attr_selected="")
#set ($nav_child_css_class = "false")

#if ($nav_child.isSelected())
#set ($nav_child_attr_selected="aria-selected='true'")
#set ($nav_child_css_class = "selected")
#end

<li style="list-style: none;" class="$nav_child_css_class" id="layout_$nav_child.getLayoutId()" $nav_child_attr_selected role="presentation">
<a aria-labelledby="layout_$nav_child.getLayoutId()" href="$nav_child.getFriendlyURL($theme_display.getLocale())" $nav_child.getTarget() role="menuitem">$nav_child.getName()</a>
</li>
#end
</ul>
#end
thumbnail
Travis Cory, modificado hace 8 años.

RE: Sub menu displaying even though the user doesn't have permissions

Junior Member Mensajes: 73 Fecha de incorporación: 4/06/13 Mensajes recientes
Cool! Happy to hear it is working!