后台菜单一级菜单的显示未根据权限设置,也没有判断下面的child菜单是否有权限,导致那些在该一级菜单下没有权限的用户能看到一级菜单,但是一级菜单下面并没有内容,例如:某个用户只有CMS的权限,但是其他的一级菜单也展示了出来,虽然下拉的时候没有显示二级菜单,但是这样不友好,应该左侧仅显示CMS模块的菜单项。
该错误逻辑源自于Menu.php以下代码:
public function getLeftMenuTreeHtml($treeArr='', $i=1){
$str = '';
foreach($treeArr as $node){
// 二次开发的过程中,如果fecshop后台的某些菜单想不显示,那么可以在配置中将active设置成false
if (isset($node['active']) && $node['active'] === false) {
continue;
}
$name = Yii::$service->page->translate->__($node["label"]);
$url_key = $node["url_key"];
$roleUrlKeys = $this->getRoleUrlKey();
if($url_key && (!isset($roleUrlKeys[$url_key]) || !$roleUrlKeys[$url_key])){
continue;
}
if($i == 1){
$str .= '<div class="accordionHeader">
<h2><span>Folder</span>'.$name .'
<span class="first_collapsable"></span>
</h2>
</div>
<div class="accordionContent">';
if($this->hasChild($node)){
$str .='<ul class="tree treeFolder">';
$str .= $this->getLeftMenuTreeHtml($node['child'],$i+1);
$str .='</ul>';
}
$str .= '</div>';
}else{
if($this->hasChild($node)){
//$str .= '<li><a href="'.CUrl::getUrl($url_key).'" target="navTab" rel="page1">'.$name.'</a>';
$str .= '<li><a href="javascript:void(0)" >'.$name.'</a>';
$str .= '<ul>';
$str .= $this->getLeftMenuTreeHtml($node['child'],$i+1);
$str .= '</ul>';
$str .= '</li>';
}else{
$str .='<li><a href="'.CUrl::getUrl($url_key).'" target="navTab" rel="page1">'.$name.'</a></li>';
}
}
}
return $str;
}
可以看到if(i==1)的时候并没有判断是否含有有权限的子菜单
本文由 vamper 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。
可自由转载、引用,但需署名作者且注明文章出处。