Bỏ qua đến nội dung chính

Management API

API nguyên thủy cung cấp hỗ trợ đầy đủ cho quản lý chính sách Casbin.

Filtered API

Hầu hết các API đã lọc đều có các tham số giống nhau (fieldIndex int, fieldValues ...string). fieldIndex là chỉ số bắt đầu khớp, fieldValues biểu thị các giá trị mà kết quả nên có. Lưu ý rằng chuỗi rỗng trong fieldValues có thể là bất kỳ từ nào.

Ví dụ:

p, alice, book, read
p, bob, book, read
p, bob, book, write
p, alice, pen, get
p, bob, pen ,get
e.GetFilteredPolicy(1, "book") // will return: [[alice book read] [bob book read] [bob book write]]

e.GetFilteredPolicy(1, "book", "read") // will return: [[alice book read] [bob book read]]

e.GetFilteredPolicy(0, "alice", "", "read") // will return: [[alice book read]]

e.GetFilteredPolicy(0, "alice") // will return: [[alice book read] [alice pen get]]

Tham khảo

biến toàn cục e là thể hiện của Enforcer.

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

Enforce()

Enforce quyết định xem một "subject" có thể truy cập vào một "object" với hành động "action" hay không, các tham số đầu vào thường là: (sub, obj, act).

Ví dụ:

ok, err := e.Enforce(request)

EnforceWithMatcher()

EnforceWithMatcher sử dụng một bộ so khớp tùy chỉnh để quyết định xem một "subject" có thể truy cập vào một "object" với hành động "action" hay không, các tham số đầu vào thường là: (matcher, sub, obj, act), sử dụng bộ so khớp mô hình mặc định khi matcher là "".

Ví dụ:

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

EnforceEx()

EnforceEx giải thích việc thực thi bằng cách thông báo các quy tắc khớp.

Ví dụ:

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

EnforceExWithMatcher()

EnforceExWithMatcher sử dụng một bộ so khớp tùy chỉnh và giải thích việc thực thi bằng cách thông báo các quy tắc khớp.

Ví dụ:

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

BatchEnforce()

BatchEnforce thực thi từng yêu cầu và trả về kết quả trong một mảng bool

Ví dụ:

boolArray, err := e.BatchEnforce(requests)

GetAllSubjects()

GetAllSubjects lấy danh sách các chủ thể xuất hiện trong chính sách hiện tại.

Ví dụ:

allSubjects := e.GetAllSubjects()

GetAllNamedSubjects()

GetAllNamedSubjects lấy danh sách các chủ thể xuất hiện trong chính sách được đặt tên hiện tại.

Ví dụ:

allNamedSubjects := e.GetAllNamedSubjects("p")

GetAllObjects()

GetAllObjects lấy danh sách các đối tượng xuất hiện trong chính sách hiện tại.

Ví dụ:

allObjects := e.GetAllObjects()

GetAllNamedObjects()

GetAllNamedObjects lấy danh sách các đối tượng xuất hiện trong chính sách được đặt tên hiện tại.

Ví dụ:

allNamedObjects := e.GetAllNamedObjects("p")

GetAllActions()

GetAllActions lấy danh sách các hành động xuất hiện trong chính sách hiện tại.

Ví dụ:

allActions := e.GetAllActions()

GetAllNamedActions()

GetAllNamedActions lấy danh sách các hành động xuất hiện trong chính sách được đặt tên hiện tại.

Ví dụ:

allNamedActions := e.GetAllNamedActions("p")

GetAllRoles()

GetAllRoles lấy danh sách các vai trò xuất hiện trong chính sách hiện tại.

Ví dụ:

allRoles = e.GetAllRoles()

GetAllNamedRoles()

GetAllNamedRoles lấy danh sách các vai trò xuất hiện trong chính sách được đặt tên hiện tại.

Ví dụ:

allNamedRoles := e.GetAllNamedRoles("g")

GetPolicy()

GetPolicy lấy tất cả các quy tắc ủy quyền trong chính sách.

Ví dụ:

policy = e.GetPolicy()

GetFilteredPolicy()

GetFilteredPolicy lấy tất cả các quy tắc ủy quyền trong chính sách, có thể chỉ định bộ lọc trường.

Ví dụ:

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

GetNamedPolicy()

GetNamedPolicy lấy tất cả các quy tắc ủy quyền trong chính sách được đặt tên.

Ví dụ:

namedPolicy := e.GetNamedPolicy("p")

GetFilteredNamedPolicy()

GetFilteredNamedPolicy lấy tất cả các quy tắc ủy quyền trong chính sách được đặt tên, có thể chỉ định bộ lọc trường.

Ví dụ:

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

GetGroupingPolicy()

GetGroupingPolicy lấy tất cả các quy tắc kế thừa vai trò trong chính sách.

Ví dụ:

groupingPolicy := e.GetGroupingPolicy()

GetFilteredGroupingPolicy()

GetFilteredGroupingPolicy lấy tất cả các quy tắc kế thừa vai trò trong chính sách, có thể chỉ định bộ lọc trường.

Ví dụ:

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

GetNamedGroupingPolicy()

GetNamedGroupingPolicy lấy tất cả các quy tắc kế thừa vai trò trong chính sách.

Ví dụ:

namedGroupingPolicy := e.GetNamedGroupingPolicy("g")

GetFilteredNamedGroupingPolicy()

GetFilteredNamedGroupingPolicy lấy tất cả các quy tắc thừa kế vai trò trong chính sách.

Ví dụ:

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

HasPolicy()

HasPolicy xác định xem một quy tắc ủy quyền có tồn tại hay không.

Ví dụ:

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

HasNamedPolicy()

HasNamedPolicy xác định xem một quy tắc ủy quyền được đặt tên có tồn tại hay không.

Ví dụ:

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

AddPolicy()

AddPolicy thêm một quy tắc ủy quyền vào chính sách hiện tại. Nếu quy tắc đã tồn tại, hàm sẽ trả về false và quy tắc sẽ không được thêm vào. Ngược lại, hàm sẽ trả về true bằng cách thêm quy tắc mới.

Ví dụ:

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

AddPolicies()

AddPolicies thêm các quy tắc ủy quyền vào chính sách hiện tại. Hoạt động này có tính chất nguyên tử. Vì vậy, nếu các quy tắc ủy quyền bao gồm các quy tắc không nhất quán với chính sách hiện tại, hàm sẽ trả về false và không có quy tắc chính sách nào được thêm vào chính sách hiện tại. Nếu tất cả các quy tắc ủy quyền nhất quán với các quy tắc chính sách, hàm sẽ trả về true và mỗi quy tắc chính sách được thêm vào chính sách hiện tại.

Ví dụ:

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

areRulesAdded := e.AddPolicies(rules)

AddPoliciesEx()

AddPoliciesEx thêm các quy tắc ủy quyền vào chính sách hiện tại. Nếu quy tắc đã tồn tại, quy tắc sẽ không được thêm vào. Nhưng khác với AddPolicies, các quy tắc không tồn tại khác sẽ được thêm vào thay vì trả về false ngay lập tức.

Ví dụ:

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

AddNamedPolicy()

AddNamedPolicy thêm một quy tắc ủy quyền vào chính sách được đặt tên hiện tại. Nếu quy tắc đã tồn tại, hàm sẽ trả về false và quy tắc sẽ không được thêm vào. Ngược lại, hàm sẽ trả về true bằng cách thêm quy tắc mới.

Ví dụ:

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

AddNamedPolicies()

AddNamedPolicies thêm các quy tắc ủy quyền vào chính sách được đặt tên hiện tại. Hoạt động này có tính chất nguyên tử. Do đó, nếu các quy tắc ủy quyền bao gồm các quy tắc không nhất quán với chính sách hiện tại, hàm sẽ trả về false và không có quy tắc chính sách nào được thêm vào chính sách hiện tại. Nếu tất cả các quy tắc ủy quyền nhất quán với các quy tắc chính sách, hàm sẽ trả về true và mỗi quy tắc chính sách được thêm vào chính sách hiện tại.

Ví dụ:

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 thêm các quy tắc ủy quyền vào chính sách được đặt tên hiện tại. Nếu quy tắc đã tồn tại, quy tắc sẽ không được thêm. Nhưng khác với AddNamedPolicies, các quy tắc không tồn tại khác được thêm thay vì trả về false ngay lập tức.

Ví dụ:

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

SelfAddPoliciesEx()

SelfAddPoliciesEx thêm các quy tắc ủy quyền vào chính sách được đặt tên hiện tại với autoNotifyWatcher bị vô hiệu hóa. Nếu quy tắc đã tồn tại, quy tắc sẽ không được thêm vào. Nhưng khác với SelfAddPolicies, các quy tắc không tồn tại khác sẽ được thêm vào thay vì trả về false ngay lập tức.

Ví dụ:

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

RemovePolicy()

RemovePolicy loại bỏ một quy tắc ủy quyền khỏi chính sách hiện tại.

Ví dụ:

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

RemovePolicies()

RemovePolicies loại bỏ các quy tắc ủy quyền khỏi chính sách hiện tại. Hoạt động này có bản chất là nguyên tử. Do đó, nếu các quy tắc ủy quyền bao gồm các quy tắc không nhất quán với chính sách hiện tại, hàm sẽ trả về false và không có quy tắc chính sách nào bị xóa khỏi chính sách hiện tại. Nếu tất cả các quy tắc ủy quyền đều nhất quán với các quy tắc chính sách, hàm sẽ trả về true và mỗi quy tắc chính sách được xóa khỏi chính sách hiện tại.

Ví dụ:

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

areRulesRemoved := e.RemovePolicies(rules)

RemoveFilteredPolicy()

RemoveFilteredPolicy xóa một quy tắc ủy quyền khỏi chính sách hiện tại, có thể chỉ định bộ lọc trường. RemovePolicy xóa một quy tắc ủy quyền khỏi chính sách hiện tại.

Ví dụ:

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

RemoveNamedPolicy()

RemoveNamedPolicy xóa một quy tắc ủy quyền khỏi chính sách được đặt tên hiện tại.

Ví dụ:

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

RemoveNamedPolicies()

RemoveNamedPolicies loại bỏ các quy tắc ủy quyền khỏi chính sách được đặt tên hiện tại. Hoạt động này có tính chất nguyên tử. Do đó, nếu các quy tắc ủy quyền bao gồm các quy tắc không nhất quán với chính sách hiện tại, hàm sẽ trả về false và không có quy tắc chính sách nào bị loại bỏ khỏi chính sách hiện tại. Nếu tất cả các quy tắc ủy quyền nhất quán với các quy tắc chính sách, hàm sẽ trả về true và mỗi quy tắc chính sách sẽ bị loại bỏ khỏi chính sách hiện tại.

Ví dụ:

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 loại bỏ một quy tắc ủy quyền khỏi chính sách được đặt tên hiện tại, có thể chỉ định bộ lọc trường.

Ví dụ:

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

HasGroupingPolicy()

HasGroupingPolicy xác định xem có tồn tại một quy tắc thừa kế vai trò hay không.

Ví dụ:

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

HasNamedGroupingPolicy()

HasNamedGroupingPolicy xác định xem có tồn tại một quy tắc thừa kế vai trò được đặt tên hay không.

Ví dụ:

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

AddGroupingPolicy()

AddGroupingPolicy thêm một quy tắc thừa kế vai trò vào chính sách hiện tại. Nếu quy tắc đã tồn tại, hàm sẽ trả về false và quy tắc sẽ không được thêm vào. Ngược lại, hàm sẽ trả về true bằng cách thêm quy tắc mới.

Ví dụ:

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

AddGroupingPolicies()

AddGroupingPolicies thêm các quy tắc thừa kế vai trò vào chính sách hiện tại. Hoạt động này có tính chất nguyên tử. Do đó, nếu các quy tắc ủy quyền bao gồm các quy tắc không nhất quán với chính sách hiện tại, hàm sẽ trả về false và không có quy tắc chính sách nào được thêm vào chính sách hiện tại. Nếu tất cả các quy tắc ủy quyền nhất quán với các quy tắc chính sách, hàm sẽ trả về true và mỗi quy tắc chính sách được thêm vào chính sách hiện tại.

Ví dụ:

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

areRulesAdded := e.AddGroupingPolicies(rules)

AddGroupingPoliciesEx()

AddGroupingPoliciesEx thêm các quy tắc thừa kế vai trò vào chính sách hiện tại. Nếu quy tắc đã tồn tại, quy tắc sẽ không được thêm. Nhưng khác với AddGroupingPolicies, các quy tắc không tồn tại khác được thêm vào thay vì trả về false trực tiếp.

Ví dụ:

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

AddNamedGroupingPolicy()

AddNamedGroupingPolicy thêm một quy tắc kế thừa vai trò được đặt tên vào chính sách hiện tại. Nếu quy tắc đã tồn tại, hàm sẽ trả về false và quy tắc sẽ không được thêm. Ngược lại, hàm sẽ trả về true bằng cách thêm quy tắc mới.

Ví dụ:

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

AddNamedGroupingPolicies()

AddNamedGroupingPolicies thêm các quy tắc kế thừa vai trò được đặt tên vào chính sách hiện tại. Hoạt động này có tính chất nguyên tử. Do đó, nếu các quy tắc ủy quyền bao gồm các quy tắc không nhất quán với chính sách hiện tại, hàm sẽ trả về false và không có quy tắc chính sách nào được thêm vào chính sách hiện tại. Nếu tất cả các quy tắc ủy quyền đều nhất quán với các quy tắc chính sách, hàm sẽ trả về true và mỗi quy tắc chính sách được thêm vào chính sách hiện tại.

Ví dụ:

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

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

AddNamedGroupingPoliciesEx()

AddNamedGroupingPoliciesEx thêm các quy tắc thừa kế vai trò được đặt tên vào chính sách hiện tại. Nếu quy tắc đã tồn tại, quy tắc sẽ không được thêm. Nhưng khác với AddNamedGroupingPolicies, các quy tắc không tồn tại khác sẽ được thêm thay vì trả về false trực tiếp.

Ví dụ:

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

RemoveGroupingPolicy()

RemoveGroupingPolicy xóa một quy tắc thừa kế vai trò khỏi chính sách hiện tại.

Ví dụ:

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

RemoveGroupingPolicies()

RemoveGroupingPolicies loại bỏ các quy tắc thừa kế vai trò khỏi chính sách hiện tại. Hoạt động này có tính chất nguyên tử. Do đó, nếu các quy tắc ủy quyền bao gồm các quy tắc không nhất quán với chính sách hiện tại, hàm sẽ trả về false và không có quy tắc chính sách nào bị loại bỏ khỏi chính sách hiện tại. Nếu tất cả các quy tắc ủy quyền nhất quán với các quy tắc chính sách, hàm sẽ trả về true và mỗi quy tắc chính sách bị loại bỏ khỏi chính sách hiện tại.

Ví dụ:

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

areRulesRemoved := e.RemoveGroupingPolicies(rules)

RemoveFilteredGroupingPolicy()

RemoveFilteredGroupingPolicy loại bỏ một quy tắc thừa kế vai trò khỏi chính sách hiện tại, có thể chỉ định bộ lọc trường.

Ví dụ:

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

RemoveNamedGroupingPolicy()

RemoveNamedGroupingPolicy loại bỏ một quy tắc thừa kế vai trò từ chính sách được đặt tên hiện tại.

Ví dụ:

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

RemoveNamedGroupingPolicies()

RemoveNamedGroupingPolicies loại bỏ các quy tắc thừa kế vai trò được đặt tên từ chính sách hiện tại. Hoạt động này có tính chất nguyên tử. Do đó, nếu các quy tắc ủy quyền bao gồm các quy tắc không nhất quán với chính sách hiện tại, hàm sẽ trả về false và không có quy tắc chính sách nào bị loại bỏ khỏi chính sách hiện tại. Nếu tất cả các quy tắc ủy quyền nhất quán với các quy tắc chính sách, hàm sẽ trả về true và mỗi quy tắc chính sách sẽ bị loại bỏ khỏi chính sách hiện tại.

Ví dụ:

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

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

RemoveFilteredNamedGroupingPolicy()

RemoveFilteredNamedGroupingPolicy loại bỏ một quy tắc kế thừa vai trò từ chính sách được đặt tên hiện tại, có thể chỉ định bộ lọc trường.

Ví dụ:

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

UpdatePolicy()

UpdatePolicy cập nhật một chính sách cũ thành chính sách mới.

Ví dụ:

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

UpdatePolicies()

UpdatePolicies cập nhật tất cả các chính sách cũ thành chính sách mới.

Ví dụ:

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

AddFunction()

AddFunction thêm một hàm tùy chỉnh.

Ví dụ:

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 tải các chính sách đã lọc từ tệp/cơ sở dữ liệu.

Ví dụ:

err := e.LoadFilteredPolicy()

LoadIncrementalFilteredPolicy()

LoadIncrementalFilteredPolicy thêm một chính sách đã lọc từ tệp/cơ sở dữ liệu.

Ví dụ:

err := e.LoadIncrementalFilteredPolicy()

UpdateGroupingPolicy()

UpdateGroupingPolicy cập nhật oldRule thành newRule trong phần g

Ví dụ:

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

UpdateNamedGroupingPolicy()

CậpNhậtNhómĐặtTênChínhSách cập nhật quy tắc cũ có tên ptype thành quy tắc mới trong phần g

Ví dụ:

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

SetFieldIndex()

ĐặtChỉMụcTrường hỗ trợ tùy chỉnh tên và vị trí thông thường của sub, obj, domainpriority.

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

Ví dụ:

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