使用CodeIgniter创建CMS并进行身份验证我正在使用Ion Auth。
这里我试图根据Ion AUth db group table中定义的访问级别(用户组)创建递归管理菜单。
我有3个组syste_admin
,Managers
和Human Resource
我想设置对菜单的访问权限,因此只有具有访问权限的用户才能看到此类菜单项。
定义菜单项的数组
$menu = array(
'dashboard' => array(
'display' => 'Dashboard',
'url' => 'admin/dashboard',
'iconclass' => 'fa fa-home',
'attributes' => 'class="hellow-atts"',
'access' => array('system_admin','managers', 'hr')
),
'employee' => array(
'display' => 'Employee',
'url' => 'admin/hr',
'iconclass' => false,
'access' => array('system_admin','hr'),
'sub' => array(
'manage' => array('display' => 'Manage All'),
'add_new' => array('display' => 'Add New'),
'access' => array('system_admin','hr'),
),
),
'links' => array(
'display' => 'Recommended Links',
'iconclass' => 'fa fa-th',
'access' => array('system_admin'),
),
'contact' => array(
'display' => 'Contact Us',
'access' => array('system_admin'),
),
'part' => array('display' => '', 'divider' => true, 'url' => '#'),
);
echo '<nav id="page-leftbar" role="navigation">';
echo admin_side_menu($menu);
echo '</nav>';
菜单助手功能
if ( ! function_exists('admin_side_menu'))
{
function admin_side_menu($menu_array, $is_sub=FALSE, $attributes=FALSE, $iconclass=FALSE, $divider=FALSE)
{
$CI =& get_instance();
$attr = (!$is_sub) ? ' id="sidebar" class="acc-menu"' : ' class="acc-menu"';
$menu = "<ul$attr>"; // Open the menu container
/*
* I want to check here if user is in defined
* access group than s/he will be elligable to
* access the menu else it won't display
*/
// this is to test if getting $access
// however finally I want to wrap this
// condition to the list item to make
// it works with the access levele
if($CI->ion_auth->in_group($access)) {
echo 'You have access';
} else {
echo 'You don\'t have access';
} //end if/else
foreach($menu_array as $id => $properties) {
echo '<pre>', print_r($properties), '</pre>';
foreach($properties as $key => $val) {
if(is_array($val))
{
$sub = admin_side_menu($val, TRUE);
}
else
{
$sub = NULL;
$$key = $val;
}
}
if(!isset($url)) {
$url = $id;
}
$lclass = ($divider) ? ' class="divider"' : '';
$icon = (isset($iconclass)) ? '<i class="'.$iconclass.'"></i>' : '';
$item = (!$divider) ? anchor($url, $icon.'<span>'.$display.'</span>', $attributes).$sub : '';
$menu .= '<li'.$lclass.'>'.$item.'</li>';
unset($url, $display, $sub);
} // end foreach
return $menu . "</ul>";
}
}
对于代码,我收到的错误有Invalid argument supplied for foreach
,Undefined variable: display
,Undefined variable: sub
等。
这可能是因为我没有正确地呼叫access
或者不知道出了什么问题。我不是那么专家,第一次使用组权限创建递归菜单。
任何人都可以告诉我如何使用和设置access
的数组,以便我可以在整个菜单中检查它,包括子级别,并根据定义的访问级别进行显示。
答案 0 :(得分:1)
好的,没有人帮到这里,但我找到了答案..
<强>功能强>
if ( ! function_exists('admin_side_menu'))
{
function admin_side_menu($menu_array) {
$CI =& get_instance();
echo '<ul>'; // Open the menu container
//go through each top level menu item
foreach($menu_array as $item) {
$admin_group = $CI->config->item('admin_group', 'ion_auth');
$item['access'] = array_key_exists('access', $item) ? $item['access'] : $admin_group;
if($CI->ion_auth->in_group($item['access'])){
echo '<li><a href="'.$item['link'].'"">'.$item['label'].'</a>';
//see if this menu has children
if(array_key_exists('children', $item)) {
echo '<ul>';
//echo the child menu
admin_side_menu($item['children']);
echo '</ul>';
}
echo '</li>';
}// end if
} // end foreach
echo '</ul>';
}
}
在视图中设置
$menu = array(
array(
'label' => 'Dashboard',
'link' => 'admin/dashboard',
'access' => array('system_admin', 'hr', 'guest'),
'children' => array(
array(
'label' => 'Admin Can See',
'link' => 'http://google.com',
'access' => array('system_admin', 'hr', 'guest'),
),
array(
'label' => 'Guest Can See',
'link' => 'http://google.com',
'access' => array('system_admin', 'hr', 'guest'),
)
)
),
);
echo '<nav id="page-leftbar" role="navigation">';
echo admin_side_menu($menu);
echo '</nav>';
非常感谢...... :))