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

有人用过 casbin?后台权限管理你们一般如何选型?

  •  
  •   zhuzhibin ·
    BinZhiZhu · 2019-01-27 18:31:05 +08:00 · 8296 次点击
    这是一个创建于 2155 天前的主题,其中的信息可能已经有所发展或是发生改变。

    begin

    最近再琢磨 casbin,支持多种 models 的权限管理方案,类似第三方类库吧,但是文档看着很难受,基于 go 写的。

    question

    • 大佬们一般如何选型或者说设计权限管理的方案呢?
    • 有人关注过或者说使用过 casbin 可交流一下。

    code

    model:模型 policy:规则

        $path =realpath(__DIR__ . '/../config/casbin');
        $modelPath = $path.'/model.conf';
        $policyPath = $path .'/policy.csv';
        $casbin = new Enforcer($modelPath,$policyPath);
        $sub = 'tester';
        $obj = 'backend';
        $act = 'read';
    
        if (true === $casbin->enforce($sub, $obj, $act)) {
        // permit alice to read data1x
        } else {
        throw new \Exception('deny the request');
        }
    
    

    上面的例子就是简单 match:用户 tester 是否有 backend 后台读取的权限

    talk

    casbin: https://github.com/casbin/casbin
    gayhub: https://github.com/BinZhiZhu

    5 条回复    2019-01-28 11:10:12 +08:00
    xuanbg
        1
    xuanbg  
       2019-01-27 20:09:24 +08:00
    权限管理其实分两块:授权和鉴权。
    对于功能权限来说,授权一般采用 RBAC 模型,把每个需要授权的功能定义成资源即可。鉴权也很简单,只需要在调用服务的时候进行就可以了,在网关、服务的拦截器或者控制器都可以进行鉴权。无非就是需要服务调用者提供 Token 或者别的可以表明用户身份的东西,然后鉴权模块根据服务调用者提供的身份信息去找这个用户是否有授权罢了。
    然鹅,RBAC 模型不提供数据权限的管理方案,于是只能自己造轮子了。我的方案其实和 RBAC 一脉相承,就是把数据的拥有者定义成资源,然后查询的时候由权限管理模块提供一个资源集合作为查询条件。这个方案的缺点是无法抽象成和业务无关的独立功能,完全和业务耦合在一起。
    zhuzhibin
        2
    zhuzhibin  
    OP
       2019-01-27 20:22:40 +08:00 via iPhone
    @xuanbg 我之前组织 Rbac 仅仅是通过路由 用户访问到控制器这一层的时候进行判断权限 一般用户会拥有角色加权限 角色实际上就是权限的集合 然后把这些授权访问的资源通过路由组织成一个个子节点 这样的话会变得很有局限性 举个例子 某个 curd 操作不走路由怎么办?
    xuanbg
        3
    xuanbg  
       2019-01-28 08:51:07 +08:00
    @zhuzhibin 你这个是前端实现的伪权限,最大的用处是提升人机交互的友好度。真要控制权限,得在服务端进行鉴权。你一个页面有多个功能操作最正常不过了,不同的操作是调用不同的接口来实现的,只要一个或多个接口对应一个操作,鉴权就不是问题了。唯一无法在服务端进行鉴权的,就是复制内容这种完全在前端实现的功能了,好在这种功能有前端实现伪权限也就够了。
    ruoxie
        4
    ruoxie  
       2019-01-28 10:14:22 +08:00
    自己实现一下 RBAC 就已经够用,要做到数据权限控制,那就是 ABAC 了,可以在 RBAC 的基础上做扩展
    xkeyideal
        5
    xkeyideal  
       2019-01-28 11:10:12 +08:00
    自己写了一个,在 RBAC 的基础上封装数据权限,casbin 的配置比较麻烦,也没在实际项目中使用过。
    实现的方案是基于数据签名的方式,还算比较好用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2603 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:16 · PVG 14:16 · LAX 22:16 · JFK 01:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.