在 Casbin 中, 访问控制模型被抽象为基于 PERM (Policy, Effect, Request, Matcher) 的一个文件。 因此,切换或升级项目的授权机制与修改配置一样简单。 您可以通过组合可用的模型来定制您自己的访问控制模型。 例如,您可以在一个model中获得RBAC角色和ABAC属性,并共享一组policy规则。

    Casbin中最基本、最简单的model是ACL。ACL中的model CONF为:

    1. # Request definition
    2. [request_definition]
    3. r = sub, obj, act
    4. # Policy definition
    5. [policy_definition]
    6. p = sub, obj, act
    7. # Policy effect
    8. [policy_effect]
    9. e = some(where (p.eft == allow))
    10. # Matchers
    11. [matchers]
    12. m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

    ACL model的示例policy如下:

    1. p, alice, data1, read
    2. p, bob, data2, write

    这表示:

    • alice可以读取data1
    • bob可以编写data2
      对于过长的单行配置,您也可以通过在结尾处添加“\”进行断行:
    1. # Matchers
    2. [matchers]
    3. m = r.sub == p.sub && r.obj == p.obj \
    4. && r.act == p.act

    此外,对于 ABAC,您在可以在 Casbin golang 版本中尝试下面的 (jCasbin 和 Node-Casbin 尚不支持)操作:

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

    但是你应确保数组的长度大于 1,否则的话将会导致 panic 。

    对于更多操作,你可以查看govaluate

    原文: https://casbin.org/docs/zh-CN/how-it-works