提供对Casbin策略管理完全支持的基本API。

参考

全局变量 e是执行者实例。

  1. e := NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")

GetAllSubjects()

GetAllSubjects 获取当前策略中显示的主题列表。
For example:


  1. allSubjects := e.GetAllSubjects()

GetAllNamedSubjects()

GetAllNamedSubjects 获取当前命名策略中显示的主题列表。
For example:


  1. allNamedSubjects := e.GetAllNamedSubjects("p")

GetAllObjects()

GetAllObjects 获取当前策略中显示的对象列表。
例如:


  1. allObjects := e.GetAllObjects()

GetAllNamedObjects()

GetAllNamedObjects 获取当前命名策略中显示的对象列表。
例如:


  1. allNamedObjects := e.GetAllNamedObjects("p")

GetAllActions()

GetAllActions 获取当前策略中显示的操作列表。
例如:


  1. allActions := e.GetAllActions()

GetAllNamedActions()

GetAllNamedActions 获取当前命名策略中显示的操作列表。
例如:


  1. allNamedActions := e.GetAllNamedActions("p")

GetAllRoles()

GetAllRoles获取当前策略中显示的角色列表。
例如:


  1. allRoles = e.GetAllRoles()

GetAllNamedRoles()

GetAllNamedRoles 获取当前命名策略中显示的角色列表。
例如:


  1. allNamedRoles := e.GetAllNamedRoles("g")

GetPolicy()

GetPolicy 获取策略中的所有授权规则。
例如:


  1. policy = e.GetPolicy()

GetFilteredPolicy()

GetFilteredPolicy 获取策略中的所有授权规则,可以指定字段筛选器。
例如:


  1. filteredPolicy := e.GetFilteredPolicy(0, "alice")

GetNamedPolicy()

GetNamedPolicy 获取命名策略中的所有授权规则。
例如:


  1. namedPolicy := e.GetNamedPolicy("p")

GetFilteredNamedPolicy()

GetFilteredNamedPolicy 获取命名策略中的所有授权规则,可以指定字段过滤器。
例如:


  1. filteredNamedPolicy = e.GetFilteredNamedPolicy("p", 0, "bob")

GetGroupingPolicy()

GetGroupingPolicy 获取策略中的所有角色继承规则。
例如:


  1. groupingPolicy := e.GetGroupingPolicy()

GetFilteredGroupingPolicy()

GetFilteredGroupingPolicy 获取策略中的所有角色继承规则,可以指定字段筛选器。
例如:


  1. filteredGroupingPolicy := e.GetFilteredGroupingPolicy(0, "alice")

GetFilteredNamedGroupingPolicy()

GetFilteredNamedGroupingPolicy 获取策略中的所有角色继承规则。
例如:


  1. namedGroupingPolicy := e.GetFilteredNamedGroupingPolicy("g", 0, "alice")

HasPolicy()

HasPolicy 确定是否存在授权规则。
例如:


  1. hasPolicy := e.HasPolicy("data2_admin", "data2", "read")

HasNamedPolicy()

HasNamedPolicy 确定是否存在命名授权规则。
例如:


  1. hasNamedPolicy := e.HasNamedPolicy("p", "data2_admin", "data2", "read")

AddPolicy()

AddPolicy 向当前策略添加授权规则。 如果规则已经存在,函数返回false,并且不会添加规则。 否则,函数通过添加新规则并返回true。
例如:


  1. added := e.AddPolicy("eve", "data3", "read")

AddPolicies()

AddPolicies向当前策略添加授权规则。这种操作本质上是原子性的。因此,如果授权规则由与当前策略不一致的规则组成,则函数返回false,并且不向当前策略添加任何策略规则。如果所有授权规则与策略规则一致,则函数返回true,并将每个策略规则添加到当前策略中。
例如:


  1. rules := [][] string {
  2. []string {"jack", "data4", "read"},
  3. []string {"katy", "data4", "write"},
  4. []string {"leyo", "data4", "read"},
  5. []string {"ham", "data4", "write"},
  6. }
  7. areRulesAdded := e.AddPolicies(rules)

AddNamedPolicy()

AddNamedPolicy将授权规则添加到当前命名策略。如果规则已经存在,函数将返回false,并且规则将不被添加。否则,函数将通过添加新规则返回true。
例如:


  1. added := e.AddNamedPolicy("p", "eve", "data3", "read")

AddNamedPolicies()

AddNamedPolicies向当前命名策略添加授权规则。这种操作本质上是原子性的。因此,如果授权规则由与当前策略不一致的规则组成,则函数返回false,并且不向当前策略添加任何策略规则。如果所有授权规则与策略规则一致,则函数返回true,并将每个策略规则添加到当前策略中。
例如:


  1. rules := [][] string {
  2. []string {"jack", "data4", "read"},
  3. []string {"katy", "data4", "write"},
  4. []string {"leyo", "data4", "read"},
  5. []string {"ham", "data4", "write"},
  6. }
  7. areRulesAdded := e.AddNamedPolicies("p", rules)

RemovePolicy()

RemovePolicy从当前策略中删除授权规则。
例如:


  1. removed := e.RemovePolicy("alice", "data1", "read")

RemovePolicies()

RemovePolicies从当前策略中删除授权规则。这种操作本质上是原子性的。因此,如果授权规则由与当前策略不一致的规则组成,函数将返回false,并且没有策略规则从当前策略中删除。如果所有授权规则都与策略规则一致,则函数返回true,并且从当前策略中删除每个策略规则。
例如:


  1. rules := [][] string {
  2. []string {"jack", "data4", "read"},
  3. []string {"katy", "data4", "write"},
  4. []string {"leyo", "data4", "read"},
  5. []string {"ham", "data4", "write"},
  6. }
  7. areRulesRemoved := e.RemovePolicies(rules)

RemoveFilteredPolicy()

RemoveFilteredPolicy从当前策略中删除授权规则,可以指定字段筛选器。RemovePolicy从当前策略中删除授权规则。
例如:


  1. removed := e.RemoveFilteredPolicy(0, "alice", "data1", "read")

RemoveNamedPolicy()

RemoveNamedPolicy从当前命名策略中删除授权规则。


  1. removed := e.RemoveNamedPolicy("p", "alice", "data1", "read")

RemoveNamedPolicies()

RemoveNamedPolicies从当前命名策略中删除授权规则。这种操作本质上是原子性的。因此,如果授权规则由与当前策略不一致的规则组成,函数将返回false,并且没有策略规则从当前策略中删除。如果所有授权规则都与策略规则一致,则函数返回true,并且从当前策略中删除每个策略规则。
例如:


  1. rules := [][] string {
  2. []string {"jack", "data4", "read"},
  3. []string {"katy", "data4", "write"},
  4. []string {"leyo", "data4", "read"},
  5. []string {"ham", "data4", "write"},
  6. }
  7. areRulesRemoved := e.RemoveNamedPolicies("p", rules)

RemoveFilteredNamedPolicy()

RemoveFilteredNamedPolicy从当前命名策略中删除授权规则,可以指定字段筛选器。
例如:


  1. removed := e.RemoveFilteredNamedPolicy("p", 0, "alice", "data1", "read")

HasGroupingPolicy()

HasGroupingPolicy确定角色继承规则是否存在。
例如:


  1. has := e.HasGroupingPolicy("alice", "data2_admin")

HasNamedGroupingPolicy()

HasNamedGroupingPolicy确定是否存在命名角色继承规则。
例如:


  1. has := e.HasNamedGroupingPolicy("g", "alice", "data2_admin")

AddGroupingPolicy()

AddGroupingPolicy将角色继承规则添加到当前策略。如果规则已经存在,函数将返回false,并且规则将不被添加。否则,函数将通过添加新规则返回true。
例如:


  1. added := e.AddGroupingPolicy("group1", "data2_admin")

AddGroupingPolicies()

AddGroupingPolicies将角色继承规则添加到当前策略中。这种操作本质上是原子性的。因此,如果授权规则由与当前策略不一致的规则组成,则函数返回false,并且不向当前策略添加任何策略规则。如果所有授权规则与策略规则一致,则函数返回true,并将每个策略规则添加到当前策略中。
例如:


  1. rules := [][] string {
  2. []string {"jack", "data4", "read"},
  3. []string {"katy", "data4", "write"},
  4. []string {"leyo", "data4", "read"},
  5. []string {"ham", "data4", "write"},
  6. }
  7. areRulesAdded := e.AddGroupingPolicies(rules)

AddNamedGroupingPolicy()

AddNamedGroupingPolicy将命名角色继承规则添加到当前策略。如果规则已经存在,函数将返回false,并且规则将不被添加。否则,函数将通过添加新规则返回true。
例如:


  1. added := e.AddNamedGroupingPolicy("g", "group1", "data2_admin")

AddNamedGroupingPolicies()

AddNamedGroupingPolicies将命名角色继承规则添加到当前策略中。这种操作本质上是原子性的。因此,如果授权规则由与当前策略不一致的规则组成,则函数返回false,并且不向当前策略添加任何策略规则。如果所有授权规则与策略规则一致,则函数返回true,并将每个策略规则添加到当前策略中。
For example:


  1. rules := [][] string {
  2. []string {"jack", "data4", "read"},
  3. []string {"katy", "data4", "write"},
  4. []string {"leyo", "data4", "read"},
  5. []string {"ham", "data4", "write"},
  6. }
  7. areRulesAdded := e.AddNamedGroupingPolicies("g", rules)

RemoveGroupingPolicy()

RemoveGroupingPolicy从当前策略删除角色继承规则。
For example:


  1. removed := e.RemoveGroupingPolicy("alice", "data2_admin")

RemoveGroupingPolicies()

RemoveGroupingPolicies从当前策略中删除角色继承规则。这种操作本质上是原子性的。因此,如果授权规则由与当前策略不一致的规则组成,函数将返回false,并且没有策略规则从当前策略中删除。如果所有授权规则都与策略规则一致,则函数返回true,并且从当前策略中删除每个策略规则。
For example:


  1. rules := [][] string {
  2. []string {"jack", "data4", "read"},
  3. []string {"katy", "data4", "write"},
  4. []string {"leyo", "data4", "read"},
  5. []string {"ham", "data4", "write"},
  6. }
  7. areRulesRemoved := e.RemoveGroupingPolicies(rules)

RemoveFilteredGroupingPolicy()

RemoveFilteredGroupingPolicy从当前策略中删除角色继承规则,可以指定字段过滤器。
For example:


  1. removed := e.RemoveFilteredGroupingPolicy(0, "alice")

RemoveNamedGroupingPolicy()

RemoveNamedGroupingPolicy从当前命名策略中删除角色继承规则。
For example:


  1. removed := e.RemoveNamedGroupingPolicy("g", "alice")

RemoveNamedGroupingPolicies()

RemoveNamedGroupingPolicies从当前策略中删除指定角色继承规则。这种操作本质上是原子性的。因此,如果授权规则由与当前策略不一致的规则组成,函数将返回false,并且没有策略规则从当前策略中删除。如果所有授权规则都与策略规则一致,则函数返回true,并且从当前策略中删除每个策略规则。

  1. rules := [][] string {
  2. []string {"jack", "data4", "read"},
  3. []string {"katy", "data4", "write"},
  4. []string {"leyo", "data4", "read"},
  5. []string {"ham", "data4", "write"},
  6. }
  7. areRulesRemoved := e.RemoveNamedGroupingPolicies("g", rules)

RemoveFilteredNamedGroupingPolicy()

RemoveFilteredNamedGroupingPolicy从当前命名策略中删除角色继承规则,可以指定字段过滤器。
For example:


  1. removed := e.RemoveFilteredNamedGroupingPolicy("g", 0, "alice")

UpdatePolicy()

更新旧策略为新策略。
For example:


  1. updated, err := e.UpdatePolicy([]string{"eve", "data3", "read"}, []string{"eve", "data3", "write"})

AddFunction()

添加一个自定义函数。
For example:


  1. func CustomFunction(key1 string, key2 string) bool {
  2. if key1 == "/alice_data2/myid/using/res_id" && key2 == "/alice_data/:resource" {
  3. return true
  4. } else if key1 == "/alice_data2/myid/using/res_id" && key2 == "/alice_data2/:id/using/:resId" {
  5. return true
  6. } else {
  7. return false
  8. }
  9. }
  10. func CustomFunctionWrapper(args ...interface{}) (interface{}, error) {
  11. key1 := args[0].(string)
  12. key2 := args[1].(string)
  13. return bool(CustomFunction(key1, key2)), nil
  14. }
  15. e.AddFunction("keyMatchCustom", CustomFunctionWrapper)