webadmin编辑角色管理后,一些菜单会自动消失

banro512

webadmin编辑角色管理后,之前添加的某些正常菜单会自动消失(被自动从数据库中删掉)

bug描述

后台手动添加了菜单,使用、显示均正常,数据表admin_rules里也有这条记录。


上级菜单=0,iframe接入,name=app\admin\controller\Index@home。此控制器和方法真实存在且有效,/admin/index/home是可以正常访问和显示

数据表 admin_rules中此时正确生成了记录

但当到-权限管理-角色管理,进行新增或编辑已有角色后。刷新后台,新增的这个菜单就会消失。
从数据库表 admin_rules 里也找不到记录了,说明已经被删掉了。

并非所有新增菜单都如此,加了很多,发现只有一个会出现此问题。这个是打算作为控制台使用的,即顶级菜单、iframe接入,详细配置如上图。

期待的结果及实际结果

角色管理编辑和菜单是否消失,应该无关

/*

admin_rules表增加了一个 int(10) xuhao 字段,default 0,用于排序,
`xuhao` int unsigned NOT NULL DEFAULT '0'

plugin/admin/app/controller/common/MenuController.php getRulesAndItems() 方法 
AdminRule::orderBy('xuhao','asc')->get()->toArray(); 增加了排序orderBy语句,其他均是默认

*/

// 前台代码是修改了标题等中文名称后重新编译覆盖的。这个应该和数据库无关

重现bug的步骤

  1. 新增菜单。配置如下图。刷新后台,确认菜单出现

  2. 到 权限管理-角色管理中,新增一个角色并随便赋予权限后保存。刷新后台,查看菜单是否还在

系统环境及workerman/webman等具体版本

centos 7.9

PHP 8.1.9 (cli) (built: Aug 9 2022 10:39:55) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.9, Copyright (c) Zend Technologies

Webman-framework v1.4.9

webman-admin 0.3.4

891 2 1
2个回答

damao

类 app\admin\controller\Index 不存在,应该是 app\admin\controller\IndexController ?

  • banro512 2022-11-01

    存在,我的控制器是不带 Controller 后缀的,这个控制器和方法是一直能正常使用的,/admin/index/home, 即便从菜单中被删除

walkor

角色管理里会触发plugin/admin/app/api/controller/auth/AdminRuleController.php 里的 syncRules方法,syncRules方法会删除类方法不存在的菜单,把这段注释掉试下。

截图

  • banro512 2022-11-01

    这段代码注释掉就可以了。但是这个控制器和方法是真实存在的,并且也能直接通过url /admin/index/home访问的。
    上面正文里有截图。
    原本是我自己的后台,通过iframe集成到的 webadmin中

  • banro512 2022-11-01

    测试了下,似乎是这样的,作为顶级的菜单,name不能使用 @action,如果我将name改为 app\admin\controller\Index 即使不注释掉,也不会删除,可以继续在其下增加子菜单 home。但是如果name后加上 @home,则会被删除

年代过于久远,无法发表回答
🔝