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

bug问题 · vamper · 于 4年前 发布 · 1616 次阅读

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

共收到 6 条回复 fecshop
Fecmall#14年前 0 个赞

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

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

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

vamper#24年前 0 个赞

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

Fecmall#34年前 0 个赞

后续处理

Fecmall#43年前 0 个赞

1.多谢您将自己的代码分享出来,这个地方的确需要优化

2.您的代码有一定的问题,有一些菜单如果在配置中设置了active为false,你的代码没有处理这个

3.我自己写了一下代码来修复了这个问题:https://github.com/fecshop/yii2_fecshop/commit/759072591fb113020dfe562a21ee78f96a578bfc

4.再次感谢您的分享。

basstk#53年前 0 个赞

这个优化已并入最新版本里面了吗?

Fecmall#63年前 0 个赞

没,等2.6.1发版吧,得积累一下问题再发版

急用的可以手动改,上面有github地址

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