跳转到主要内容

Role Manager API

RoleManager 接口定义了角色层级和用户—角色链接如何存储和查询。你可以挂载匹配函数(matching functions),从而支持角色名或域名中的通配符(例如 *)。下文中的 e 是 Enforcer,rm 是 RoleManager。

RoleManager API​

AddNamedMatchingFunc​

为某个 policy 类型(例如 g)注册匹配函数。在评估角色链接时使用,使类似 * 的模式可以匹配多个名称。

    e.AddNamedMatchingFunc("g", "", util.KeyMatch)
_, _ = e.AddGroupingPolicies([][]string{{"*", "admin", "domain1"}})
_, _ = e.GetRoleManager().HasLink("bob", "admin", "domain1") // -> true, nil

AddNamedDomainMatchingFunc​

为角色链接中的 domain 字段注册匹配函数(例如在三参数的 g 中)。支持在域名中使用通配符。

示例:

    e, _ := casbin.NewEnforcer("path/to/model", "path/to/policy")
e.AddNamedDomainMatchingFunc("g", "", util.MatchKey)

GetRoleManager​

返回用于默认 grouping policy 类型(例如 g)的 role manager。

    rm := e.GetRoleManager()

GetNamedRoleManager​

返回用于特定 policy 类型(例如 g2)的 role manager。

    rm := e.GetNamedRoleManager("g2")

SetRoleManager​

设置用于默认 grouping policy 类型的 role manager。

    e.SetRoleManager(rm)

SetNamedRoleManager​

设置用于特定 policy 类型(例如 g2)的 role manager。

    rm := e.SetNamedRoleManager("g2", rm)

Clear​

清空 role manager 中的所有角色/链接数据。

    rm.Clear()

添加一条链接,使 name1 在给定 domain 中拥有角色 name2(或者将 domain 作为前缀,具体取决于 model)。

    rm.AddLink("u1", "g1", "domain1")

移除给定 domain 中 name1 与 name2 之间的链接。

    rm.DeleteLink("u1", "g1", "domain1")

返回在给定 domain 中 name1 是否拥有角色 name2(直接拥有或通过继承拥有)。

    rm.HasLink("u1", "g1", "domain1")

GetRoles​

返回用户在给定 domain 中拥有的所有角色(包括继承而来的)。

    rm.GetRoles("u1", "domain1")

GetUsers​

返回拥有给定角色的所有用户(如适用,指在默认 domain 中)。

    rm.GetUsers("g1")

PrintRoles​

将所有角色打印到 role manager 的 logger 中(用于调试)。

    rm.PrintRoles()

SetLogger​

设置 role manager 使用的 logger(例如用于 PrintRoles)。

    logger := log.DefaultLogger{}
logger.EnableLog(true)
rm.SetLogger(&logger)
_ = rm.PrintRoles()

GetDomains​

返回用户至少拥有一个角色的 domain。(仅 Go 支持;函数签名可能有所不同。)

    result, err := rm.GetDomains(name)