V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
NoKey
V2EX  ›  程序员

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

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

    接口访问权限交给后端处理就好了
    x250881478
        9
    x250881478  
       2024-03-04 21:17:14 +08:00
    看你们业务需求 粒度准备控制到多细了, 权限最终就是一个字符串或数字标识 根据这个标识, 前端判断是否能展示, 是否能发起请求. 后端判断是否响应请求.
    粗粒度的可以用类似角色这种来控制, 判断的是用户是否是某个角色
    细粒度的就可以非常精确了, 可以给页面, 按钮, tab, 接口等全部设置权限标识, 最终根据标识决定用户哪些功能可用
    LeeSeoung
        10
    LeeSeoung  
       2024-03-05 09:10:29 +08:00
    进页面前把涉及的权限 ID 都发送到后台判断是否有权限,每一条权限 ID 有对应的组件,前台根据返回结果判断是否展示元素。后台再加一层拦截调用对应功能前再判断一次权限 ID 就可以了。
    dudubaba
        11
    dudubaba  
       2024-03-05 15:27:57 +08:00
    1 、通用菜单
    2 、每个菜单都有对应的父级,父级没权限子菜单肯定也没。
    leonkfd
        12
    leonkfd  
       2024-03-06 09:43:37 +08:00
    1. 登录后将后端返回的角色路由存到 store
    2. 页面菜单栏:将全量的菜单目录根据当前权限过滤出所需菜单
    3. 配置路由守卫:每次跳转路由都判断有无权限
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   959 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 21:48 · PVG 05:48 · LAX 13:48 · JFK 16:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.