在python中支持acl、rbac、abac等访问控制模型的授权库

casbin的Python项目详细描述


皮卡斯宾

生成状态覆盖状态/a>versionpypi-wheelpyversionsdownloadgitter

新闻:仍然担心如何编写正确的casbin策略?casbin在线编辑来帮忙了!点击http://casbin.org/editor/" rel="nofollow">http://casbin.org/editor/

casbin是一个强大而高效的python项目开源访问控制库。它提供了基于各种访问控制模型的强制授权支持。

casbin支持的所有语言:

<表><广告>golangjavanodejsphp< /广告><正文>casbinjcasbin节点casbinphp-casbin生产就绪生产就绪生产-准备好/td>生产就绪<表><广告>pythondotnetdelphirust< /广告><正文>pycasbincasbin.netcasbin4dcasbin-rs生产就绪生产就绪实验性 WIP

目录

支持的型号

  1. acl(访问控制列表)
  2. 具有超级用户的acl
  3. 没有用户的acl:对于没有身份验证或用户登录的系统特别有用。
  4. 没有资源的acl:有些场景可能使用权限(如写文章读日志)来针对某一类型的资源,而不是单个资源。它不控制对特定文章或日志的访问。
  5. rbac(基于角色的访问控制)
  6. 具有资源角色的RBAC:用户和资源可以同时具有角色(或组)。
  7. 带域/租户的RBAC:用户可以为不同的域/租户设置不同的角色集。
  8. abac(基于属性的访问控制):语法sugar likeresource.owner可用于获取资源的属性。
  9. restful:支持/res/*/res/:id等路径和getpostputdelete
  10. 拒绝覆盖:同时支持"允许"和"拒绝"授权,拒绝覆盖"允许"。
  11. 优先级:可以像防火墙规则一样对策略规则进行优先级排序。
  12. < > >

    它是怎么工作的?

    在casbin中,基于perm元模型(policy、effect、request、matchers)将访问控制模型抽象成conf文件。因此,切换或升级项目的授权机制与修改配置一样简单。通过组合可用的模型,可以自定义自己的访问控制模型。例如,您可以在一个模型中获取rbac角色和abac属性,并共享一组策略规则。

    casbin中最基本、最简单的模型是acl。acl的模型配置是:

    # Request definition[request_definition]r=sub, obj, act# Policy definition[policy_definition]p=sub, obj, act# Policy effect[policy_effect]e=some(where (p.eft == allow))# Matchers[matchers]m=r.sub == p.sub && r.obj == p.obj && r.act == p.act

    acl模型的示例策略如下:

    p, alice, data1, read
    p, bob, data2, write
    

    意思是:

    • 爱丽丝可以读取数据1
    • Bob可以写入数据2

    我们还支持多行模式,在最后加上"\":

    # Matchers[matchers]m=r.sub == p.sub && r.obj == p.obj \   && r.act == p.act

    此外,如果您使用abac,您可以在casbingolang版本中尝试operatorin,如下所示(jcasbin和node casbin尚不受支持):

    # Matchers[matchers]m=r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')

    但是您应该确保数组的长度比1多,否则会导致数组死机。

    对于更多的运营商,您可以查看govaluate

    功能

    casbin做什么:

    1. 在经典的{subject,object,action}表单或您定义的自定义表单中实施策略,同时支持"允许"和"拒绝"授权。
    2. 处理访问控制模型及其策略的存储。
    3. 管理角色用户映射和角色角色映射(在rbac中也称为角色层次结构)。
    4. 支持内置超级用户,如rootadministrator。超级用户可以在没有明确权限的情况下执行任何操作。
    5. 支持规则匹配的多个内置运算符。例如,keymatch可以将资源键/foo/bar映射到模式/foo*
    6. < > >

      casbin不做的事:

      1. 身份验证(即当用户登录时验证用户名密码
      2. 管理用户或角色列表。我相信项目本身更方便管理这些实体。用户通常有自己的密码,而casbin不是设计为密码容器的。但是,casbin存储rbac场景的用户角色映射。
      3. < > >

        安装

        pip install casbin
        

        文档

        https://casbin.org/docs/en/overview

        在线编辑

        您还可以使用在线编辑器(http://casbin.org/editor/" rel="nofollow">http://casbin.org/editor/)在Web浏览器中编写您的casbin模型和策略。它提供了语法突出显示和代码完成等功能,就像编程语言的ide一样。

        教程

        https://casbin.org/docs/en/tutorials

        开始

        1. 使用模型文件和策略文件新建casbin执行器:
        2. < > >
          importcasbine=casbin.Enforcer("path/to/model.conf","path/to/policy.csv")

          注意:您也可以用db而不是file中的policy初始化一个执行器,有关详细信息,请参见persistence部分。

          1. 在访问发生之前在代码中添加一个强制钩子:
          2. < > >
            sub="alice"# the user that wants to access a resource.obj="data1"# the resource that is going to be accessed.act="read"# the operation that the user performs on the resource.ife.enforce(sub,obj,act):# permit alice to read data1passelse:# deny the request, show an errorpass
            1. 除了静态策略文件外,casbin还为r提供了权限管理api联合国时间。例如,您可以获得分配给用户的所有角色,如下所示:
            2. < > >
              roles=e.get_roles("alice")

              有关更多用法,请参见策略管理API。

              1. 有关更多用法,请参阅测试文件。
              2. < > >

                政策管理

                casbin提供两组api来管理权限:

                • 管理api:为casbin策略管理提供完全支持的原始api。有关示例,请参见此处的
                • rbac api:一个更友好的rbac api。这个api是管理api的一个子集。rbac用户可以使用这个api来简化代码。有关示例,请参见此处

                我们还为模型管理和策略管理提供了一个基于web的ui:

                模型编辑器

                策略编辑器

                策略持久性

                https://casbin.org/docs/en/adapters

                角色经理

                https://casbin.org/docs/en/role managers

                基准

                https://casbin.org/docs/en/benchmark

                示例

                <表><广告>型号 模型文件 策略文件 < /广告><正文> ACLbasic_model.confbasic_policy.csv具有超级用户的aclbasic_model_with_root.confbasic_policy.csv没有用户的aclbasic_model_without_users.conf基本_policy_without_users.csv没有资源的aclbasic_model_without_resources.conf基本策略_without_resources.csv澳大利亚央行rbac_model.confrbac_policy.csv具有资源角色的RBACrbac_model_with_resource_roles.confrbac_polic您可以使用资源角色.csv具有域/租户的RBACrbac_model_with_domains.confrbac_policy_with_domains.csvABACabac_model.conf n/a宁静的keymatch_model.confkeymatch_policy.csv拒绝覆盖rbac_model_with_deny.confrbac_policy_with_deny.csv优先级优先级_model.conf优先级策略.csv

                中间产品

                authz middleware for web frameworks:https://casbin.org/docs/en/middlewares" rel="nofollow">https://casbin.org/docs/en/middlewares

                我们的采用者

                https://casbin.org/docs/en/adopters

                贡献者

                这个项目的存在要感谢所有的贡献者。

                支持者

                感谢我们所有的支持者![成为支持者]

                赞助商

                通过成为赞助人来支持这个项目。您的徽标将显示在这里,并带有指向您网站的链接。[成为申办人]

                <HREF="HTT"ps://opencollective.com/casbin/sponsor/4/website" rel="nofollow">

                许可证

                此项目是在apache 2.0许可下获得许可的

                联系人

                如果您有任何问题或功能要求,请与我们联系。欢迎公关。

                欢迎加入QQ群-->: 979659372 Python中文网_新手群

                推荐PyPI第三方库


热门话题
java如何使用JNA创建同一库的多个实例?   java在将Graphql查询作为JSON字符串传递时收到意外的令牌错误   OAuth2 oltu的java问题   java桌面应用程序使用的好的嵌入式数据库是什么?   java Firebase数据库高级查询选项   java正在使磁盘上的EhCache元素过期   java 安卓还原处于backstack中的片段的实例状态   XMemcached中的java异步集   java TimescaleDB是否使用与Postgresql完全相同的JDBC驱动程序?   java从网站c读取信息#   检查java Android中的字符串是否只包含数字和空格   c#如何向web服务发送特殊字符?   grails无法调用需要java的方法。lang.类参数?   java我在组合框中调用的方法不会运行所有代码,它只运行部分代码   java发送带有标头的HTTP GET请求