在前后端分离的环境下,前端和后端的权限要共享还是说彻底分开? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
gaojiangouyu

在前后端分离的环境下,前端和后端的权限要共享还是说彻底分开?

  •  
  •   gaojiangouyu Aug 2, 2021 3783 views
    This topic created in 1736 days ago, the information mentioned may be changed or developed.

    设计:在一个系统中,每一个能被用户访问到的资源都有一个对应的 PermissionCode,权限标识。

    方案 1:由后端开发人员定义一套权限标识,每一个接口对应到一个权限标识,前后端共享这套权限标识,用户登陆的时候获取到当前用户的所有权限标识,根据用户拥有的权限标识来决定要不要渲染某个特定的组件,如:表单,按钮等

    方案 1 的优点:前后端共用一套权限标识,减少了很多维护成本

    方案 1 的缺点:前端的组件和后端接口的关系有时不是一一对应的,如:前端有一个 panel,上面有三个 tab1,tab2,tab3,这三个 tab 对应到后端的某个接口 A,虽然用户拥有了接口 A 的权限,但是由于用户由于角色问题无法访问到 tab3 的数据,接口 A 只会返回 tab1,tab2 的数据,由于公用权限标识,这个时候无法隐藏掉 tab3 (你可能会觉得 tab3 可以显示,只是没数据而已,但是可能存在一些场景是需要隐藏掉的,只能从设计 ui 上面去调整)

    方案 2:前端只管前端的权限标识,后端只管后端的权限标识,分成两套,用户登陆的时候只会获取到和前端相关的权限标识,并根据具体业务去渲染不同的组件。

    方案 2 的优点:可以避免方案 1 出现的问题

    方案 2 的缺点:增大了维护成本

    目前实践上,哪种方案是比较好的?

    18 replies    2021-08-04 09:27:37 +08:00
    calmzhu
        1
    calmzhu  
       Aug 2, 2021
    数据权限也加上权限标识
    binux
        2
    binux  
       Aug 2, 2021 via Android
    > 由于用户由于角色问题无法访问到 tab3 的数据
    不要混着用“角色”,全部用权限控制。你非得要角色就用角色继承权限。
    gaojiangouyu
        3
    gaojiangouyu  
    OP
       Aug 2, 2021
    @binux 这里涉及另外一个概念:数据权限,是在接口内部去判断的,如果你只用一个接口去返回三个 tab 的数据,那么必然会存在不对应的问题
    chanchan
        4
    chanchan  
       Aug 2, 2021
    方案二吧 前后端分离
    wangbenjun5
        5
    wangbenjun5  
       Aug 2, 2021
    前端权限没那个必要做的十全十美,比如说精确到一个页面或者按钮,我觉得后端接口权限控制好就差不多了。

    前端没做权限控制最多就是点开页面的时候调用接口发现没权限,难看是难看点,但是简单易用,完全做到前后端一一对应也不现实。。。一般这种管理后台都是自己人用,没必要。
    pengtdyd
        6
    pengtdyd  
       Aug 2, 2021
    前端的权限不是后台给的?
    gaojiangouyu
        7
    gaojiangouyu  
    OP
       Aug 2, 2021
    @wangbenjun5 因为这个给业务部门投诉了,近期。
    binux
        8
    binux  
       Aug 2, 2021 via Android
    @gaojiangouyu 可以,不管你叫什么,在哪判断的。权限标识就是 gold rule,前后端共享,不会突然多出来一个角色使得接口变化。
    xuanbg
        9
    xuanbg  
       Aug 3, 2021
    前端完全可以很简单地根据接口获取的集合内容是否为空来决定是否显示 tab 啊。
    eudore
        10
    eudore  
       Aug 3, 2021
    前端请求用户显示菜单列表 api,由后端数据权限控制返回的菜单列表,在后端授权时权限就自动带上了对应菜单的数据权限。
    radiocontroller
        11
    radiocontroller  
       Aug 3, 2021
    你为什么要管后端的 tab3 角色问题,后端给你 tab3 权限你就显示,不给就不显示
    TimPeake
        12
    TimPeake  
       Aug 3, 2021
    前端权限只是为了体验 ,其他的真的不要想太多
    94
        13
    94  
       Aug 3, 2021
    我们是写了一个角色 /权限管理页面,由 admin 账户管理分配,登陆后获取 permissionList,渲染路由以及页面内按钮。

    只是如果 admin 新增 /修改了标识符,我这边(前端)需要去更新对应页面的权鉴标识。
    2kCS5c0b0ITXE5k2
        14
    2kCS5c0b0ITXE5k2  
       Aug 3, 2021
    前端是显示. 后端才是鉴权.
    lolizeppelin
        15
    lolizeppelin  
       Aug 3, 2021
    返回数据里 字段 undifine 就取消这列不就行了
    KouShuiYu
        16
    KouShuiYu  
       Aug 3, 2021
    鉴权我都是在前端和后端的路由中做的,挺方便的,这是我平时建项目的模版,
    前端:
    https://github.com/chenkai0520/vite-template/blob/main/src/router/index.js
    后端:
    https://github.com/chenkai0520/koa-sequelize-template/blob/main/app/router/index.js
    zsan6
        17
    zsan6  
       Aug 3, 2021
    拆分操作权限和数据权限,都由后端控制比较好点
    QlanQ
        18
    QlanQ  
       Aug 4, 2021
    最小单位就是权限,角色只是 一组 权限的合集,只是 为了 设置权限的时候方便点,和 鉴权无关
    About     Help     Advertise     Blog     API     FAQ     Solana     939 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 57ms UTC 23:22 PVG 07:22 LAX 16:22 JFK 19:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86