请教,关于中后台 API 权限的设计方式? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
llsquaer
V2EX    程序员

请教,关于中后台 API 权限的设计方式?

  •  
  •   llsquaer 177 天前 2142 次点击
    这是一个创建于 177 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近一直在学习后台管理系统相关内容。试了好几个 admin 源码。发现在权限管理方式上大体使用上是 2 中方案。

    第一种方案,使用标签的方式来管理 比如:'system:dept:list' 'system:notice:add'

    使用这个方式,后端接口需要手动填写标签用于权限检测 ,并写入权限表。前端同时也需要在接口上设置这些标签。

    修改权限的时候实际是在数据库中修改角色对应的权限表。

    第二种方案,开发时自动生成 api 路径存入数据表,比如: get:system/dept/list post:system/notice/add

    使用这种方式,后端就不用手动标注出来了,因为是直接通过路径入库。前端也不用额外添加标志,请求的 api 本来就是方式+路径

    修改权限实际就是在数据库中链接角色对应的 api 表。

    这两种方式,不管怎么样,最终到前端也是需要动态生成相关权限表(对象)的,只是生成的方法各有差异,按照约定规则生成就实现了前端的相应权限。

    我比较喜欢第二种,因为少写一些代码嘛。没那么多心智负担。但是看了好几个项目,大多是用的第一种。

    因为开发的少,所以还没想出使用第一种方式的场景。

    所以来问问大佬们,两种优缺点和使用上的场景??

    10 条回复    2025-04-17 18:12:42 +08:00
    Bingchunmoli
        1
    Bingchunmoli  
       177 天前 via Android
    第一种支持范围权限吧,而且框架也都做了对应的支持 后一种还需要对路由进行遍历,大的项目路由还是很多很慢的
    Ayanokouji
        2
    Ayanokouji  
       177 天前
    做中台遇到不懂的,直接参考飞书的。我推荐第一种
    https://open.feishu.cn/document/server-docs/application-scope/scope-list
    billly
        3
    billly  
       177 天前
    第一种更灵活,有个很常见的场景,添加的接口可能有多种,但这多种接口都可以用 system:notice:add 来管理权限
    xuanbg
        4
    xuanbg  
       177 天前
    我的方案是把需要对外发布的接口写在接口配置表里面,需要鉴权的接口就配置一下 auth_code ,类似 xxx_add 这样。然后在功能权限资源表对应的功能上同样配置这个 auth_code 。这样,只要这个功能被授权了,网关统一拦截请求,根据 url 就能知道这个接口需不需要鉴权,以及需要鉴权的话这个用户有没有权限访问。
    testcgd
        5
    testcgd  
       177 天前 via Android
    第一种,path 和需要的权限分开
    samnya
        6
    samnya  
       177 天前
    我习惯用类似第一种的自定义标签,因为我们这里有细分按钮和字段权限,如果往 API 路径上面加后缀,那和自定义的区别已经不大了。
    CapNemo
        7
    CapNemo  
       177 天前
    第二种方案存在将权限和路径绑定的问题。接口需要版本迭代或增加不同参数的版本时容易引发问题。
    可以考虑将第二种方案里权限配置改为使用带通配符的路由。不过设计的太复杂又容易因为配置错误导致越权。
    twofox
        8
    twofox  
       177 天前
    很多时候,同一个资源可能有不同的 update 方式。我倾向于拿同一个标签进行绑定,这样我也不用频繁修改用户权限
    spritecn
        9
    spritecn  
       177 天前
    第一种 更通用,谁知道产品要怎么设计,至少你说权限标签要手工写,那不就是一行的事,还有权限不仅仅控制路径,有些比如 update 时某个字段,A 权限能改,B 权限不能改的
    MIUIOS
        10
    MIUIOS  
       176 天前
    肯定第一种,模块多起来了就知道第一种的灵活性了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5536 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 08:48 PVG 16:48 LAX 01:48 JFK 04:48
    Do have faith in what you're doing.
    ubao 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