V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
ifhover
V2EX  ›  Go 编程语言

求教一下后台的 API 鉴权的具体实现

  •  
  •   ifhover · 2023-02-27 18:03:08 +08:00 · 1933 次点击
    这是一个创建于 426 天前的主题,其中的信息可能已经有所发展或是发生改变。
    语言用的 go ,框架是 echo ;最近想自己撸个后台的轮子结果卡在这块了
    想实现一个常规的权限管理,关联关系:用户->角色->菜单,假如角色“普通用户”没有菜单“文章管理”的权限,那文章的增删改查接口肯定要拦截"普通用户"的请求,但是不知道怎么在中间件判断用户请求的接口是文章管理的接口

    想了两种方式:
    方法 1:新建一个 API 表和角色表关联,手动录入接口 url 的正则表达式,在中间件里查角色关联的所有 API 数据后循环匹配当前请求 url 如果没匹配到就是没有权限;

    方法 2:写一个自定义函数 func AdminApi(name string),记录 name 后返回一个中间件,在 API 管理界面展示记录到的 name 列表并可以分配给角色,每个 AdminApi 函数返回的中间件闭包判断传入的 name 是否存在于当前角色的 name 列表;

    感觉两种方法都各有利弊,请教一下各位都是怎么做的 纠结好几天了🥲
    7 条回复    2023-03-01 23:12:27 +08:00
    Nazz
        1
    Nazz  
       2023-02-27 18:17:02 +08:00 via Android
    一个角色对应多个 API 权限,一个用户可以拥有多个角色,一个按钮 /页面对应多个 API 权限,然后去动态渲染菜单
    Nazz
        2
    Nazz  
       2023-02-27 18:19:49 +08:00 via Android
    鉴权的时候,在中间件里面定义可变参数,静态路径不传,动态路径要传,别用正则
    pkoukk
        3
    pkoukk  
       2023-02-27 18:50:26 +08:00
    RBAC 鉴权,按角色分配权限,再赋予用户角色
    go 有现成的实现 https://casbin.org/docs/middlewares
    daytonight
        4
    daytonight  
       2023-02-27 21:24:39 +08:00
    casbin
    ifhover
        5
    ifhover  
    OP
       2023-02-27 23:39:01 +08:00
    @daytonight
    @pkoukk
    好的 已经在学 casbin 了
    ifhover
        6
    ifhover  
    OP
       2023-02-27 23:49:00 +08:00
    @Nazz 感谢指点,刚刚发现 echo 的 context 有个.Path()方法可以返回完整的注册时的路径 /admin/article/:id😁
    czyt
        7
    czyt  
       2023-03-01 23:12:27 +08:00
    casbin\opa
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3725 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 05:07 · PVG 13:07 · LAX 22:07 · JFK 01:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.