CURRENT_USER multi-select access to various site pages and navigation based on items selected in multi.

2 posts by 2 authors in: Forums > CMS Builder
Last Post: August 1, 2016   (RSS)

By Zicky - July 27, 2016

Howdy - I need to figure out a solution which displays menu items listed in a navigation - based on the CURRENT_USER's department access permissions. A USER can have access to multiple departments. I have a multi-select called "department_intranet_access" in the "members" section of the CMS which is pulling a list from another section editor called "intranet_access_categories".  The CMS Editor can assign a USER multiple department(s) access using the multi-select called "department_intranet_access". I need some way to compare the (USER) member's "department_intranet_access" permissions against a department's category selected using a field called "intranet_access_categories" within a Category Menu section editor.

In the Category Menu "intranet_access_categories"  section editor many records exist, below are a few:

num = 39     name = Environmental
num = 41      name = Finance
num = 7      name = Fire

In Members a multi-select exist called "department_intranet_access" which members may or may not be assigned to based on their type of permissions. The multi-select in members pulls the list from the Category Menu "intranet_access_categories".

I've tried the following if statement.

<?php if ($CURRENT_USER['department_intranet_access'] =='41'): ?>User has access to Finance<?php endif ?>
<?php if ($CURRENT_USER['department_intranet_access'] =='7'): ?>User has access to Fire Dept.<?php endif ?>

Add a solution below which failed to produce any positive results.

  $searchString = '';
  //Create the where statement to be used to filter department access
  //if department values have been selected....
  if(is_array(@$CURRENT_USER['department_intranet_access:values'])){
    //Count the total number if items in the array.....
    $arrayCounter = count($CURRENT_USER['department_intranet_access:values']);
    //Loop through the array....
    foreach($CURRENT_USER['department_intranet_access:values'] as $key => $filterItem){
      //create the search string that searches the intranet_access_categories for the related value....
  $searchString .= " intranet_access_categories LIKE '%\t$filterItem\t%'";
      //If this is not the last item to filter by, add or to the statement....
      if(($key+1) != $arrayCounter){
        $searchString .= " OR ";
      }
    }  
  }


<?php if ($searchString == '41'): ?> 
<!-- '41' is the intranet_access_categories record num for the category "Finance" -->
<!-- if the CURRENT_USER a department_intranet_access multiselect chosen which includes "Finance" then the CURRENT_USER has access to intranet_access_categories record num '41' and should see this portion of the navigation -->
    <?php foreach ($finance_intranetNavRecords as $categoryRecord): ?> 
<div class="menu">  
    <?php foreach ($finance_intranetNavRecords as $categoryRecord): ?> 
<?php if ($categoryRecord['depth'] == 0): ?> 
<dl class="menu">
    <a href="<?php echo $categoryRecord['_link'] ?>"><?php echo $categoryRecord['name'] ?></a>
  <?php $parent=$categoryRecord['num'];?>
  <dt>
<?php foreach ($finance_intranetNavRecords as $categoryRecord): ?> 
<?php if ($categoryRecord['parentNum'] == $parent): ?>
<dd><a href="<?php echo $categoryRecord['_link'] ?>"><?php echo $categoryRecord['name'] ?></a></dd>
<?php endif ?> 
<?php endforeach; ?>
</dt>
<!-- /menu --></dl>
<?php endif ?>
<?php endforeach; ?>
<!-- /menu --></div>
     <?php break ?>
<?php endforeach; ?>
<!-- /$searchString --><?php endif ?>

<?php if ($searchString == '7'): ?> 
<!-- '7' is the intranet_access_categories record num for the category "Fire" -->
<!-- if the CURRENT_USER a department_intranet_access multiselect chosen which includes "Fire" then the CURRENT_USER has access to intranet_access_categories record num '7' and should see this portion of the navigation -->
    <?php foreach ($fire_intranetNavRecords as $categoryRecord): ?> 
<div class="menu">  
    <?php foreach ($fire_intranetNavRecords as $categoryRecord): ?> 
<?php if ($categoryRecord['depth'] == 0): ?> 
<dl class="menu">
    <a href="<?php echo $categoryRecord['_link'] ?>"><?php echo $categoryRecord['name'] ?></a>
  <?php $parent=$categoryRecord['num'];?>
  <dt>
<?php foreach ($fire_intranetNavRecords as $categoryRecord): ?> 
<?php if ($categoryRecord['parentNum'] == $parent): ?>
<dd><a href="<?php echo $categoryRecord['_link'] ?>"><?php echo $categoryRecord['name'] ?></a></dd>
<?php endif ?> 
<?php endforeach; ?>
</dt>
<!-- /menu --></dl>
<?php endif ?>
<?php endforeach; ?>
<!-- /menu --></div>
     <?php break ?>
<?php endforeach; ?>
<!-- /$searchString --><?php endif ?>

Any assistance figuring this out is much appreciated.

Zick

By Damon - August 1, 2016

Hi Zicky,

Try this code:

<?php if (strpos($CURRENT_USER['department_intranet_access'], '41') !== false) : ?>User has access to Finance<?php endif; ?>
<?php if (strpos($CURRENT_USER['department_intranet_access'], '7') !== false) : ?>User has access to Fire Dept.<?php endif; ?>

Let me know if this gets the results you are after.

Cheers,
Damon Edis - interactivetools.com

Hire me! Save time by getting our experts to help with your project.
http://www.interactivetools.com/consulting/