后台管理系统如何实现动态菜单权限功能?
大家好我是图恩,说来惭愧,之前图恩的后台管理系统的菜单是写死在前端的,再通过角色id来判断哪些需要显示哪些需要隐藏,这个方案内行人一看就不灵活,迫于一直以没有时间也没有想好怎么实现,才一直使用的写死数据的方案。
使用写死数据的方案缺点很明显,每次有新增菜单都是手动添加地址和权限判断,而且角色id还只能提前写死,使用起来非常不方便。
国庆节期间看一些网上的实现方案,被疫情困在家里面的时候决定还是将这个功能完善。
在这里讲解一下大概思路,首先要确定的是人跟角色可以是一对多的关系,角色跟菜单是一对一的关系,如果一个人有多个角色,那么最终他能看到的看到的菜单应该是多个角色菜单的合集,要实现人跟角色绑定,角色再跟菜单绑定,首先人、角色、菜单就需要三个基础表来存放数据,其次还需要一个人跟角色的关联表,一个角色跟菜单的关联表,总共5个表。
其中三个基础表对应的就是查各自的基础数据,角色跟人的关联表存放的是userid跟roleId,角色跟菜单的关联表存放的是roleId跟menuId,这三个Id分表对应的是基础表的id。
设置角色菜单的时候需要将roleId跟menuId存放到一张表,这样在查询的时候就能通过roleId查到。人跟角色同理,最终在查询菜单的时候会稍微复杂一些。因为菜单是有层级的,需要把某个角色拥有的所有菜单处理成有层级关系的list,其中如果有多个角色,菜单可能会存在重复的情况,那么最终菜单还需要经过去重的步骤。
最终的功能都是在磕磕绊绊中实现的,一遍上网查一遍自己摸索,终于还是实现了这个功能,现在想想对权限这一块又有了进一步的了解。
想都是问题,做才有答案,之前一直遗留的问题终于在实践中得到答案,想过了动手去做才能得到最终的到答案,理解了就去执行,不理解就去执行中理解,不能站在原地等待美好的事情发生,人永远都需要往前走,哪怕前路荆棘,也应该勇于面对。
发表评论 (审核通过后显示评论):