跳转至主要内容

Role Manager API

RoleManager 接口定义角色层级和用户与角色的关联如何存储和查询。可以附加 匹配函数,让角色名或域名支持通配符(例如 *)。下文中 e 是 Enforcer,rm 是 RoleManager。

角色管理器API​

AddNamedMatchingFunc​

为某个策略类型(例如 g)注册匹配函数。在评估角色关联时使用,让 * 这样的模式可以匹配多个名称。

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

AddNamedDomainMatchingFunc​

为角色关联中的 域 字段注册匹配函数(例如三参数的 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)

Clear​

清空角色管理器中所有的角色 / 关联数据。

    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.