跳到主要内容

**Role Manager API**

RoleManager 接口定义了如何存储和查询角色层级结构以及用户–角色链接。您可以附加 matching functions(匹配函数),以便支持在角色或域名称中使用通配符(例如 *)。在下文中,e 是一个 Enforcer,rm 是一个 RoleManager。

RoleManager API​

AddNamedMatchingFunc​

为特定策略类型(例如 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​

返回用于默认分组策略类型(例如 g)的角色管理器。

rm := e.GetRoleManager()

GetNamedRoleManager​

返回特定策略类型(例如 g2)的角色管理器。

rm := e.GetNamedRoleManager("g2")

SetRoleManager​

设置用于默认分组策略类型的角色管理器。

e.SetRoleManager(rm)

SetNamedRoleManager​

设置特定策略类型(例如 g2)的角色管理器。

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

清空​

清除角色管理器中的所有角色/链接数据。

rm.Clear()

添加一个链接,使得 name1 在给定域中拥有角色 name2(或者根据模型不同,以该域作为前缀)。

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

移除给定域中 name1 和 name2 之间的链接。

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

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

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

GetRoles​

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

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

GetUsers​

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

rm.GetUsers("g1")

PrintRoles​

将所有角色打印到角色管理器的日志记录器中(用于调试)。

rm.PrintRoles()

SetLogger​

设置角色管理器使用的日志记录器(例如用于 PrintRoles)。

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

GetDomains​

返回用户至少拥有一个角色的域列表。(仅限 Go;签名可能有所不同。)

result, err := rm.GetDomains(name)

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.