跳转至主要内容

管理 API

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

筛选的 API

几乎所有的带有过滤器的api有着相同的参数 (fieldIndex int, fieldValues ...string). field index 是匹配起始点的索引。 field Value 表示结果应该有的值。 请注意字段值中的空字符串可以是任意单词。

示例:

p, alice, book, read
p, bob, book, read
p, bob, book, write
p, alice, pen, get
p, bob, pen ,get
e.GetFilteredPolicy(1, "book") // 将返回:[Alice book read] [bob book read] [bob book write]]

e.GetFilteredPolicy(1, "book", "read") // 将返回: [[Alice book read] [bob book read]]

e.GetFilteredPolicy(0, "Alice", "", "read") // 将返回: [[Alice book read]]

e.GetFilteredPolicy(0, "Alice") // 将返回: [Alice book read] [Alice penge]]

参考

全局变量 e 是 Enforcer 实例。

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

Enforce()

Enforce决定“主体”是否能够用“动作”操作访问“对象”,输入参数通常是: (sub, obj, act)。

例如:

ok, err := e.Enforce(request)

EnforceWithMatcher()

EnforceWithMatcher使用自定义匹配器来决定“subject”是否可以通过"action"操作访问“object”, 输入参数通常为:(matcher, sub, obj, act),在匹配器为""时默认使用模型匹配器。

例如:

ok, err := e.EnforceWithMatcher(matcher, request)

EnforceEx()

EnforceEx 通过通知匹配的规则来解释执行

例如:

ok, reason, err := e.EnforceEx(request)

EnforceExWithMatcher()

EnforceExWEMatcher 使用自定义匹配器并通过通知匹配的规则来解释强制执行。

例如:

ok, reason, err := e.EnforceExWithMatcher(matcher, request)

BatchEnforce()

BatchEnforce 强制执行每个请求并返回一个布尔数组的结果

例如:

boolArray, err := e.BatchEnforce(requests)

GetAllSubjects()

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

例如:

allSubjects := e.GetAllSubjects()

GetAllNamedSubjects()

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

例如:

allNamedSubjects := e.GetAllNamedSubjects("p")

GetAllObjects()

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

例如:

allObjects := e.GetAllObjects()

GetAllNamedObjects()

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

例如:

allNamedObjects := e.GetAllNamedObjects("p")

GetAllActions()

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

例如:

allActions := e.GetAllActions()

GetAllNamedActions()

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

例如:

allNamedActions := e.GetAllNamedActions("p")

GetAllRoles()

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

例如:

allRoles = e.GetAllRoles()

GetAllNamedRoles()

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

例如:

allNamedRoles := e.GetAllNamedRoles("g")

GetPolicy()

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

例如:

policy = e.GetPolicy()

GetFilteredPolicy()

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

例如:

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

GetNamedPolicy()

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

例如:

namedPolicy := e.GetNamedPolicy("p")

GetFilteredNamedPolicy()

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

例如:

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

GetGroupingPolicy()

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

例如:

groupingPolicy := e.GetGroupingPolicy()

GetFilteredGroupingPolicy()

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

例如:

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

GetNamedGroupingPolicy()

GetNamedGroupingPolicy 获取策略中的所有角色继承规则。

例如:

namedGroupingPolicy := e.GetNamedGroupingPolicy("g")

GetFilteredNamedGroupingPolicy()

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

例如:

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

HasPolicy()

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

例如:

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

HasNamedPolicy()

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

例如:

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

AddPolicy()

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

例如:

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

AddPolicies()

AddPolicy 向当前策略添加授权许多规则。 该操作本质上是原子的 因此,如果授权规则由不符合现行政策的规则组成, 函数返回false,当前政策中没有添加任何政策规则。 如果所有授权规则都符合政策规则,则函数返回true,每项政策规则都被添加到目前的政策中。

例如:

rules := [][] string {
[]string {"jack", "data4", "read"},
[]string {"katy", "data4", "write"},
[]string {"leyo", "data4", "read"},
[]string {"ham", "data4", "write"},
}

areRulesAdded := e.AddPolicies(rules)

AddPoliciesEx()

AddPoliciesEx adds authorization rules to the current policy. If the rule already exists, the rule will not be added. But unlike AddPolicies, other non-existent rules are added instead of returning false directly

例如:

ok, err := e.AddPoliciesEx([][]string{{"user1", "data1", "read"}, {"user2", "data2", "read"}})

AddNamedPolicy()

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

例如:

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

AddNamedPolicies()

AddNamedPolicies 向当前命名策略中添加授权规则。 该操作本质上是原子的 因此,如果授权规则由不符合现行政策的规则组成, 函数返回false,当前政策中没有添加任何政策规则。 如果所有授权规则都符合政策规则,则函数返回true,每项政策规则都被添加到目前的政策中。

例如:

rules := [][] string {
[]string {"jack", "data4", "read"},
[]string {"katy", "data4", "write"},
[]string {"leyo", "data4", "read"},
[]string {"ham", "data4", "write"},
}

areRulesAdded := e.AddNamedPolicies("p", rules)

AddNamedPoliciesEx()

AddNamedPoliciesEx adds authorization rules to the current named policy. If the rule already exists, the rule will not be added. But unlike AddNamedPolicies, other non-existent rules are added instead of returning false directly

例如:

ok, err := e.AddNamedPoliciesEx("p", [][]string{{"user1", "data1", "read"}, {"user2", "data2", "read"}})

SelfAddPoliciesEx()

SelfAddPoliciesEx adds authorization rules to the current named policy with autoNotifyWatcher disabled. If the rule already exists, the rule will not be added. But unlike SelfAddPolicies, other non-existent rules are added instead of returning false directly

例如:

ok, err := e.SelfAddPoliciesEx("p", "p", [][]string{{"user1", "data1", "read"}, {"user2", "data2", "read"}})

RemovePolicy()

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

例如:

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

RemovePolicies()

RemovePolicies 从当前策略中删除授权规则。 该操作本质上是原子的 因此,如果授权规则由不符合现行政策的规则组成, 函数返回 false ,当前政策中没有任何政策规则被删除。 如果所有授权规则都符合政策规则,则函数返回true,每项政策规则都从现行政策中删除。

例如:

rules := [][] string {
[]string {"jack", "data4", "read"},
[]string {"katy", "data4", "write"},
[]string {"leyo", "data4", "read"},
[]string {"ham", "data4", "write"},
}

areRulesRemoved := e.RemovePolicies(rules)

RemoveFilteredPolicy()

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

例如:

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

RemoveNamedPolicy()

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

例如:

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

RemoveNamedPolicies()

RemoveNamedPolicies 从当前命名策略中删除授权规则。 该操作本质上是原子的 因此,如果授权规则由不符合现行政策的规则组成, 函数返回 false ,当前政策中没有任何政策规则被删除。 如果所有授权规则都符合政策规则,则函数返回true,每项政策规则都从现行政策中删除。

例如:

rules := [][] string {
[]string {"jack", "data4", "read"},
[]string {"katy", "data4", "write"},
[]string {"leyo", "data4", "read"},
[]string {"ham", "data4", "write"},
}

areRulesRemoved := e.RemoveNamedPolicies("p", rules)

RemoveFilteredNamedPolicy()

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

例如:

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

HasGroupingPolicy()

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

例如:

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

HasNamedGroupingPolicy()

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

例如:

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

AddGroupingPolicy()

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

例如:

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

AddGroupingPolicies()

AddGroupingPolicy 向当前策略添加角色继承规则。 该操作本质上是原子的 因此,如果授权规则由不符合现行政策的规则组成, 函数返回false,当前政策中没有添加任何政策规则。 如果所有授权规则都符合政策规则,则函数返回true,每项政策规则都被添加到目前的政策中。

例如:

rules := [][] string {
[]string {"ham", "data4_admin"},
[]string {"jack", "data5_admin"},
}

areRulesAdded := e.AddGroupingPolicies(rules)

AddGroupingPoliciesEx()

AddGroupingPoliciesEx adds role inheritance rules to the current policy. If the rule already exists, the rule will not be added. But unlike AddGroupingPolicies, other non-existent rules are added instead of returning false directly

例如:

ok, err := e.AddGroupingPoliciesEx([][]string{{"user1", "member"}, {"user2", "member"}})

AddNamedGroupingPolicy()

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

例如:

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

AddNamedGroupingPolicies()

AddNamedGroupingPolicies 将命名角色继承规则添加到当前策略。 该操作本质上是原子的 因此,如果授权规则由不符合现行政策的规则组成, 函数返回false,当前政策中没有添加任何政策规则。 如果所有授权规则都符合政策规则,则函数返回true,每项政策规则都被添加到目前的政策中。

例如:

rules := [][] string {
[]string {"ham", "data4_admin"},
[]string {"jack", "data5_admin"},
}

areRulesAdded := e.AddNamedGroupingPolicies("g", rules)

AddNamedGroupingPoliciesEx()

AddNamedGroupingPoliciesEx adds named role inheritance rules to the current policy. If the rule already exists, the rule will not be added. But unlike AddNamedGroupingPolicies, other non-existent rules are added instead of returning false directly

例如:

ok, err := e.AddNamedGroupingPoliciesEx("g", [][]string{{"user1", "member"}, {"user2", "member"}})

RemoveGroupingPolicy()

RemoveGroupingPolicy 从当前策略中删除角色继承规则。

例如:

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

RemoveGroupingPolicies()

RemoveGroupingPolicy 从当前策略中删除角色继承规则。 该操作本质上是原子的 因此,如果授权规则由不符合现行政策的规则组成, 函数返回 false ,当前政策中没有任何政策规则被删除。 如果所有授权规则都符合政策规则,则函数返回true,每项政策规则都从现行政策中删除。

例如:

rules := [][] string {
[]string {"ham", "data4_admin"},
[]string {"jack", "data5_admin"},
}

areRulesRemoved := e.RemoveGroupingPolicies(rules)

RemoveFilteredGroupingPolicy()

RemoveFilteredGroupingPolicy 从当前策略中移除角色继承规则,可以指定字段筛选器。

例如:

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

RemoveNamedGroupingPolicy()

RemoveNamedGroupingPolicy 从当前命名策略中移除角色继承规则。

例如:

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

RemoveNamedGroupingPolicies()

RemoveNamedGroupingPolicies 从当前策略中删除角色继承规则。 该操作本质上是原子的 因此,如果授权规则由不符合现行政策的规则组成, 函数返回 false ,当前政策中没有任何政策规则被删除。 如果所有授权规则都符合政策规则,则函数返回true,每项政策规则都从现行政策中删除。

例如:

rules := [][] string {
[]string {"ham", "data4_admin"},
[]string {"jack", "data5_admin"},
}

areRulesRemoved := e.RemoveNamedGroupingPolicies("g", rules)

RemoveFilteredNamedGroupingPolicy()

RemoveFilteredNamedGroupingPolicy 从当前命名策略中移除角色继承规则,可以指定字段筛选器。

例如:

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

UpdatePolicy()

UpdatePolicy 把旧的政策更新到新的政策

例如:

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

UpdatePolicies()

UpdatePolicies 将所有的旧政策更新到新政策

例如:

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

AddFunction()

AddFunction 添加自定义函数。

例如:

func CustomFunction(key1 string, key2 string) bool {
if key1 == "/alice_data2/myid/using/res_id" && key2 == "/alice_data/:resource" {
return true
} else if key1 == "/alice_data2/myid/using/res_id" && key2 == "/alice_data2/:id/using/:resId" {
return true
} else {
return false
}
}

func CustomFunctionWrapper(args ...interface{}) (interface{}, error) {
key1 := args[0].(string)
key2 := args[1].(string)

return bool(CustomFunction(key1, key2)), nil
}

e.AddFunction("keyMatchCustom", CustomFunctionWrapper)

LoadFilteredPolicy()

LoadFilteredPolicy从文件/数据库加载过滤完成的政策

For example:

err := e.LoadFilteredPolicy()

LoadIncrementalFilteredPolicy()

LoadFilteredPolicy从文件/数据库添加过滤完成的政策

For example:

err := e.LoadIncrementalFilteredPolicy()

UpdateGroupingPolicy()

UpdateGroupingPolicy 在 g段更新oldRule到newRule

For example:

succeed, err : = e.UpdateGroupingPolicy([]string{"data3_admin", "data4_admin"}, []string{"admin", "data4_admin"})

UpdateNamedGroupingPolicy()

UpdateNamedGroupingPolicy 在g 部分将名为 ptype 的旧策略更新为新策略

For example:

succeed, err : = e.UpdateGroupingPolicy("g1",[]string{"data3_admin", "data4_admin"}, []string{"admin", "data4_admin"})

SetFieldIndex()

设置FieldIndex 子端口自定义常规名称和位置 子类, obj, 优先级.

[policy_definition]
p = customized_priority, obj, act, eft, subject

For example:

e.SetFieldIndex("p", constant.PriorityIndex, 0)
e.SetFieldIndex("p", constant.SubjectIndex, 4)