elunez/eladmin

部门管理修改树状结构的父子级时可能会出现数据环形

luocheng0208 opened this issue · 2 comments

复现步骤
image
如上图红框所示,有个三层树结构:
顶级
——111
————222

现在我想要将111的父级设置成为222,系统会提示成功,如下图所示
image
但是此时就会导致111的父级是222(即111的pid=222的id),但原本222的父级就是111(即222的pid=111的id)。如此一来111的父级是222,222的父级又是111,这样一来就导致了父子之间的数据环形,界面上已经无法展示111和222之间的树状关系,如下图修改成功后的界面:
image

但是实际数据库中这两条数据还存在,但是由于111和222的两者的pid导致了数据环形,界面上却无法显示,数据库截图如下:
image

总的来说:就是当修改一行数据的所属父级时,只要选择的父级是该行数据下的子级,就会发生这样的错误,一旦错误,就会导致该行数据以及它下面的子级数据形成数据环形,无法形成树状结构,且导致数据库的数据成为脏数据。

此问题所有地方有树状结构编辑的地方都可能发生,例如菜单管理也是树状结构,可以检查所有有树状结构编辑的地方,以免遗漏。

@elunez 您好,你这样做虽然避免了在界面上操作出现错误的可能,但实际上这个错误还是存在的(治标不治本),比如直接调用接口,不从界面进行操作,这是存在于业务逻辑上的错误。是不是在业务代码中多添加一层逻辑上的判断,判读它选的pid不能是它自己子级的id。个人见解,望君参考,如有不同见解,还请指点一二。

elunez commented

之前写代码修复了下,父子节点互换是没问题,但是父节点换到子节点的子节点还是会出现问题,于是就弄成了这种方式。
如果加判断,编辑会变得复杂化。而且后台管理一般不会存在 api 调用接口去修改这个东西,以后如果有时间再改改这个