webadmin编辑角色管理后,之前添加的某些正常菜单会自动消失(被自动从数据库中删掉)
后台手动添加了菜单,使用、显示均正常,数据表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语句,其他均是默认
*/
// 前台代码是修改了标题等中文名称后重新编译覆盖的。这个应该和数据库无关
新增菜单。配置如下图。刷新后台,确认菜单出现
到 权限管理-角色管理中,新增一个角色并随便赋予权限后保存。刷新后台,查看菜单是否还在
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
类 app\admin\controller\Index 不存在,应该是 app\admin\controller\IndexController ?
存在,我的控制器是不带 Controller 后缀的,这个控制器和方法是一直能正常使用的,/admin/index/home, 即便从菜单中被删除
角色管理里会触发
plugin/admin/app/api/controller/auth/AdminRuleController.php
里的 syncRules方法,syncRules方法会删除类方法不存在的菜单,把这段注释掉试下。这段代码注释掉就可以了。但是这个控制器和方法是真实存在的,并且也能直接通过url /admin/index/home访问的。
上面正文里有截图。
原本是我自己的后台,通过iframe集成到的 webadmin中
测试了下,似乎是这样的,作为顶级的菜单,name不能使用 @action,如果我将name改为 app\admin\controller\Index 即使不注释掉,也不会删除,可以继续在其下增加子菜单 home。但是如果name后加上 @home,则会被删除