zoukankan      html  css  js  c++  java
  • 微服务-角色权限设计(Casbin)(3-2)

    一.基础概念
    Casbin是一个强大的,高效的开源访问控制框架,权限管理机制支持多种访问控制模型
    在项目中通过Oauth2,OpenID进行身份认证,即验证用户的用户名和密码。再做访问控制,权限约束时,引入casbin来实现,其思想是存储RBAC方案中的用户和角色之间的映射关系,同时还适用于ABAC的规则,便于以后的扩展。
     
    RBAC(Role-Based Access Control)
    提炼出角色的概念,从而实现灵活的权限管理。表结构大致是用户关联角色,角色关联权限的设计
    其中RBAC又分为RBAC0,RBAC1(角色继承),RBAC2(角色约束),RBAC3(RBAC1+RBAC2)
     
    ABAC(Attribute-Based Access Control)
    不同于将用户和权限做关联,ABAC是通过动态计算一个或一组属性来满足某种条件进行授权判断。大致分为四种属性:用户属性,环境属性,操作属性,对象属性(资源属性),搭配组合更加灵活
     
    二.工作原理
    Casbin的工作原理:基于PERM模式,通过策略规则和资源进行匹配。原理大致如下:
     
    三.实践
    (1)新建控制台程序CasbinNet
    引入Nuget包:Casbin.NET ,Casbin.NET.Adapter.EFCore
    (2)添加rbac_model.conf规则
    # Request definition
    [request_definition]
    r = sub, obj, act
    
    # Policy definition
    [policy_definition]
    p = sub, obj, act, eft # 这里我们定义了eft,不使用默认值
    
    # Policy effect
    [policy_effect]
    e = some(where (p.eft == allow)) && !some(where (p.eft == deny)) # 这里使用了deny优先
    
    # Matchers
    [matchers]
    m = r.sub == p.sub && r.obj == p.obj && r.act == p.act #最简单的匹配规则。请求的参数与策略参数一致时获得策略结果
    (3)核心代码:
     1  var options = new DbContextOptionsBuilder<CasbinDbContext<int>>()
     2                 .UseSqlite("Data Source=casbin_example.sqlite3")
     3                 //.UseNpgsql("User ID=postgres;Password=123456;Host=127.0.0.1;Port=5432;Database=Craftica;Pooling=true;")
     4                 .Options;
     5             var context = new CasbinDbContext<int>(options);
     6 
     7             // If it doesn't exist, you can use this to create it automatically.
     8             //context.Database.EnsureCreated();
     9 
    10             // Initialize a EF Core adapter and use it in a Casbin enforcer:
    11             var efCoreAdapter = new EFCoreAdapter<int>(context);
    12             var e = new Enforcer("examples/rbac_model.conf", efCoreAdapter);
    13 
    14             // Load the policy from DB.
    15             e.LoadPolicy();
    16 
    17             // Check the permission.
    18             bool aaa= e.Enforce("alice", "data1", "read");

    示例中使用UseSqlite, 初次运行会在数据库中自动生成表casbin_rule。

    字段V0-V5名称可以暂时不用管,第四步会具体进行修改
    在Sqlite中配置角色资源信息,如下图所示:
    其中Enforcer通过rbac_model.conf和资源文件列表匹配数据,再和request模型进行匹配,如果返回true,表示成功,反之则没有权限
     
    以alice,data1,read为例:
     
    四.Adapter 适配器优化
    不用casbin提供的Nuget包 Casbin.NET.Adapter.EFCore
    如下图所示:
    自定义Adapter和表实体Model模型,其中CasbinDbAdapter要继承接口IAdapter的一些策略的增删改查的方法
    核心是实现加载策略的方法LoadPolicy,要有数据列表加载:
    在实际开发中,为了加载数据的提升,建议放在Redis中维护
    其他使用规则和步骤三大致相似,附中提供参考源码
     
    以上仅用于学习和总结!
     
    附:
    步骤3源码:
    链接:https://pan.baidu.com/s/1ivvDfolFzImwERSzfY4QgQ
    提取码:s3v4
     
    步骤4源码:
    链接:https://pan.baidu.com/s/1e25OYt5R6BMsh3TW8UjCDg
    提取码:xq3m
     
    参考文档:
     

  • 相关阅读:
    LoadRunner测试结果分析
    安装LoadRunner时提示缺少vc2005_sp1_with_atl_fix_redist解决方案
    LoadRunner 11 安装及破解
    android批量文件上传(android批量图片上传)
    nginx优化配置
    redis节点管理-节点的移除
    jQuery获取表格隐藏域与ajax请求数据结合显示详情
    el表达式运算符
    EL表达式中获取list长度(JSTL函数用法)
    SQL之case when then用法(用于分类统计)
  • 原文地址:https://www.cnblogs.com/ywkcode/p/14679158.html
Copyright © 2011-2022 走看看