请问一下,不在菜单树上的菜单如何控制权限

2024-03-04 19:30:50 +08:00
 NoKey
在做一个权限管理系统
前端的菜单展示,使用的是后端返回的菜单树数据进行渲染
但是总有部分功能,它不在菜单树上,前端也不展示,会被默认调起来
这类功能如何控制权限呢?谢谢
就是后端如何告知前端,这个人有这么一个功能,或者另外要给人没有这个功能
1811 次点击
所在节点    程序员
12 条回复
wanniwa
2024-03-04 19:40:10 +08:00
前端都不展示,还跟前端有毛关系,后端自己加接口权限
iOCZS
2024-03-04 19:40:20 +08:00
尽管不是菜单,但是可能是 tab 或者 button ,这种情况是需要指定一个权限的。前端从用户信息里获取权限列表,确定是否要展示 tab 或者 button 。当然进一步,还要控制接口权限,如果需要的话。
NoKey
2024-03-04 19:42:07 +08:00
@iOCZS 意思就是,要分菜单树和权限列表两部分信息给前端?
NoKey
2024-03-04 19:42:27 +08:00
@wanniwa 前端也是要分不同的人,不同的权限,只是有些功能是隐藏的
iOCZS
2024-03-04 19:49:47 +08:00
@NoKey 看你怎么设计表。你也看到了权限分为菜单、按钮、接口几种,其中按钮经常对应某个接口,所以看起来可以用同一个权限名字。对于前端,就是用权限名称控制按钮是否显示。对于后端,就是用权限名称判断用户是否有调用权限。好像还是数据权限一说,对于同一个接口,不同的角色能访问的数据还不相同。还在研究中。。。
wanniwa
2024-03-04 19:54:12 +08:00
@NoKey #4 正常是直接后端返回当前用户的可以使用的权限资源,一般就是 menu 接口或者用户信息查询接口会给,里面会加上字段去判断是不是菜单。但是像你说的部分功能你就可以理解成按钮权限,更细化的权限。因为每个权限后端定义的时候都会给一个 code ,你在实现的时候,你只管当前用户权限集合中有没有这个 code 来展示元素就行了,比如:sys:role:list ,角色列表不展示,并不用纠结是不是菜单。
wanniwa
2024-03-04 19:57:48 +08:00
@NoKey #4 你在渲染菜单数的时候可以过滤掉不是菜单的数据,但是底层你得缓存一份全量的权限 code 数据,方便你自封封装个属性类似 hasPermis='sys:role:list' 只要加在元素上子就会判断当前用户权限 code 中是否存在,没有就不展示
learnshare
2024-03-04 20:19:00 +08:00
前端的权限一般要分成 页面(是否可见)和 操作( RCUD 等,可以随意扩展) 两部分
菜单对应的是页面权限,页面中的内容和功能放在操作权限里

接口访问权限交给后端处理就好了
x250881478
2024-03-04 21:17:14 +08:00
看你们业务需求 粒度准备控制到多细了, 权限最终就是一个字符串或数字标识 根据这个标识, 前端判断是否能展示, 是否能发起请求. 后端判断是否响应请求.
粗粒度的可以用类似角色这种来控制, 判断的是用户是否是某个角色
细粒度的就可以非常精确了, 可以给页面, 按钮, tab, 接口等全部设置权限标识, 最终根据标识决定用户哪些功能可用
LeeSeoung
2024-03-05 09:10:29 +08:00
进页面前把涉及的权限 ID 都发送到后台判断是否有权限,每一条权限 ID 有对应的组件,前台根据返回结果判断是否展示元素。后台再加一层拦截调用对应功能前再判断一次权限 ID 就可以了。
dudubaba
2024-03-05 15:27:57 +08:00
1 、通用菜单
2 、每个菜单都有对应的父级,父级没权限子菜单肯定也没。
leonkfd
2024-03-06 09:43:37 +08:00
1. 登录后将后端返回的角色路由存到 store
2. 页面菜单栏:将全量的菜单目录根据当前权限过滤出所需菜单
3. 配置路由守卫:每次跳转路由都判断有无权限

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1020553

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX