Forum Discussion

Quelyn's avatar
Quelyn
Genius
10 years ago

Help with Freemarker & Menu Permissions

Hello!  We have a menu to browse the sections of the community that different roles have access to.  The way I have this setup is using if and elseif commands.  

<li class=""><a href="/t5/Forums/ct-p/forums">Forums</a>
<ul class="menu menu-flash-array">
<!-- Registered User Forum Menu --> 
    <#if user_has_role == "reguser" >
        <li><a href="/t5/Forum1/bd-p/forum1">Forum 1</a></li>
<!-- Customer Forum Menu -->
    <#elseif user_has_role == "customer" >
        <li><a href="/t5/Forum1/bd-p/forum1">Forum 1</a></li>
        <li><a href="/t5/Forum2/bd-p/forum2">Forum 2</a></li>
        <li><a href="/t5/Forum3/bd-p/forum3">Forum 3</a></li>
<!-- Partner Forum Menu -->
	<#elseif user_has_role == "partner" >
        <li><a href="/t5/Forum1/bd-p/forum1">Forum 1</a></li>
        <li><a href="/t5/Forum2/bd-p/forum2">Forum 2</a></li>
        <li><a href="/t5/Forum3/bd-p/forum3">Forum 3</a></li>
        <li><a href="/t5/Forum4/bd-p/forum4">Forum 4</a></li>
<!-- Employee Forum Menu -->
	<#elseif user_has_role == "employee" >
        <li><a href="/t5/Forum1/bd-p/forum1">Forum 1</a></li>
        <li><a href="/t5/Forum2/bd-p/forum2">Forum 2</a></li>
        <li><a href="/t5/Forum3/bd-p/forum3">Forum 3</a></li>
        <li><a href="/t5/Forum4/bd-p/forum4">Forum 4</a></li>
        <li><a href="/t5/Forum5/bd-p/forum5">Forum 5</a></li>
<!-- Support Forum Menu -->
	<#elseif user_has_role?? && (user_has_role == "support" || user_has_role == "admin") >
        <li><a href="/t5/Forum1/bd-p/forum1">Forum 1</a></li>
        <li><a href="/t5/Forum2/bd-p/forum2">Forum 2</a></li>
        <li><a href="/t5/Forum3/bd-p/forum3">Forum 3</a></li>
        <li><a href="/t5/Forum4/bd-p/forum4">Forum 4</a></li>
        <li><a href="/t5/Forum5/bd-p/forum5">Forum 5</a></li>
        <li><a href="/t5/Forum6/bd-p/forum6">Forum 6</a></li>
    </#if>
</ul>

What is happening is that we have some users with two roles.  Employee AND Support.  So, when they get to the point in the code where it assigns them "employee", it stops looking further and they see those menu items only.  

 

I use Support as a role that's for access only, and they get their baseline defaults from Employee.  This is the only place where this causes an issue.  Is there a way to fix this in the freemarker code? 

 

Any assistance is greatly appreciated! 

 

 

 

  • OlivierS's avatar
    OlivierS
    Lithium Alumni (Retired)

    Quelyn maybe something like:

     

    <!-- Employee Forum Menu -->
    	<#elseif user_has_role == "employee" >
              <#if user_has_role == "support">
    <!-- user has employee and support role -->
    <!-- display what you want to display -->
               <#elseif>
            <li><a href="/t5/Forum1/bd-p/forum1">Forum 1</a></li>
            <li><a href="/t5/Forum2/bd-p/forum2">Forum 2</a></li>
            <li><a href="/t5/Forum3/bd-p/forum3">Forum 3</a></li>
            <li><a href="/t5/Forum4/bd-p/forum4">Forum 4</a></li>
            <li><a href="/t5/Forum5/bd-p/forum5">Forum 5</a></li>
    <#/if> <!-- Support Forum Menu --> <#elseif user_has_role?? && (user_has_role == "support" || user_has_role == "admin") > <#if user_has_role == "employee"> <!-- user has employee and support role --> <!-- display what you want to display --> <!-- note: not sure this condition is necessary --> <#elseif> <li><a href="/t5/Forum1/bd-p/forum1">Forum 1</a></li> <li><a href="/t5/Forum2/bd-p/forum2">Forum 2</a></li> <li><a href="/t5/Forum3/bd-p/forum3">Forum 3</a></li> <li><a href="/t5/Forum4/bd-p/forum4">Forum 4</a></li> <li><a href="/t5/Forum5/bd-p/forum5">Forum 5</a></li> <li><a href="/t5/Forum6/bd-p/forum6">Forum 6</a></li>
    <#/if>

    • Quelyn's avatar
      Quelyn
      Genius

      Trying this and getting an error: 

      Freemarker template 'ContentWrapper' parsing failed:

      ParseException:Parsing error in template "ContentWrapper" in line 102, column 18:
      Unknown directive: #elseif. Help (latest version): http://freemarker.org/docs/ref_directive_alphaidx.html; you're using FreeMarker 2.3.20.

       

      I'll try variations on this... Definitely seems closer.  The elseif in the middle needs to be "else", but that still doens't work.  Back to the drawing board :)

      • OlivierS's avatar
        OlivierS
        Lithium Alumni (Retired)

        Quelyn correct ... bothe elseif should be else ... I just wrote the code like that to show the logic ... it might be full of errors!