关于后台左侧菜单的不友好展示

bug问题 · vamper · 于 15天前 发布 · 83 次阅读

后台菜单一级菜单的显示未根据权限设置,也没有判断下面的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 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

共收到 3 条回复 fecshop
Fecmall#115天前 0 个赞

1.样式乱了,请用md格式

2.显示出来也无妨,并没有什么问题,后台自己人用

3.自行修改,自己花时间处理一下,分享出来不更好?开源的意义在于多参与。

vamper#215天前 0 个赞

自己处理也可能,在代码的可读性上就大打折扣了。

Fecmall#315天前 0 个赞

@vamper #2楼 这算不上bug,自行处理。

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics