التخطي إلى المحتوى الرئيسي

Management API

واجهة برمجة التطبيقات الأولية التي توفر دعمًا كاملاً لإدارة سياسات Casbin.

Filtered API

تقريباً جميع واجهات البرمجة المفلترة لها نفس المعاملات (fieldIndex int, fieldValues ...string). fieldIndex هو الفهرس الذي يبدأ منه التطابق، fieldValues تشير إلى القيم التي يجب أن يحتوي عليها النتيجة. لاحظ أن السلسلة الفارغة في fieldValues يمكن أن تكون أي كلمة.

مثال:

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]]

مرجع

المتغير العالمي 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 يستخدم مطابق مخصص ليقرر ما إذا كان "الموضوع" يمكنه الوصول إلى "الكائن" بعملية "الإجراء"، المعاملات الإدخالية عادةً ما تكون: (matcher, sub, obj, act)، استخدم مطابق النموذج بشكل افتراضي عندما يكون matcher فارغًا.

على سبيل المثال:

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

EnforceEx()

EnforceEx يشرح تطبيق الإنفاذ من خلال إبلاغ القواعد المطابقة.

على سبيل المثال:

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

EnforceExWithMatcher()

EnforceExWithMatcher يستخدم مطابق مخصص ويشرح تطبيق الإنفاذ من خلال إبلاغ القواعد المطابقة.

على سبيل المثال:

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

BatchEnforce()

BatchEnforce يطبق كل طلب ويعيد النتيجة في مصفوفة من نوع bool

على سبيل المثال:

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()

يضيف AddPolicies قواعد التفويض إلى السياسة الحالية. العملية ذات طبيعة ذرية. لذلك، إذا كانت قواعد التفويض تتكون من قواعد غير متوافقة مع السياسة الحالية، تعيد الوظيفة 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 قواعد التفويض إلى السياسة الحالية. إذا كانت القاعدة موجودة بالفعل، لن تضاف القاعدة. لكن على عكس AddPolicies، تضاف القواعد غير الموجودة بدلاً من إعادة false مباشرةً

على سبيل المثال:

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 قواعد التفويض إلى السياسة المسماة الحالية. إذا كانت القاعدة موجودة بالفعل، لن تضاف القاعدة. لكن على عكس AddNamedPolicies، تضاف القواعد غير الموجودة بدلاً من إعادة false مباشرةً

على سبيل المثال:

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

SelfAddPoliciesEx()

يضيف SelfAddPoliciesEx قواعد التفويض إلى السياسة المسماة الحالية مع تعطيل autoNotifyWatcher. إذا كانت القاعدة موجودة بالفعل، لن تضاف القاعدة. لكن على عكس SelfAddPolicies، تضاف القواعد غير الموجودة بدلاً من إعادة false مباشرةً

على سبيل المثال:

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 ولا تزال أي قاعدة سياسة من السياسة الحالية. إذا كانت جميع قواعد التفويض متوافقة مع قواعد السياسة، فإن الوظيفة تعيد قيمة صحيحة ويتم إزالة كل قاعدة سياسة من السياسة الحالية.

على سبيل المثال:

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 بإضافة قاعدة توريث الدور إلى السياسة الحالية. إذا كانت القاعدة موجودة بالفعل، فإن الوظيفة تعيد قيمة خاطئة ولن يتم إضافة القاعدة. وإلا فإن الوظيفة تعيد قيمة صحيحة عن طريق إضافة القاعدة الجديدة.

على سبيل المثال:

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

AddGroupingPolicies()

تقوم وظيفة AddGroupingPolicies بإضافة قواعد توريث الدور إلى السياسة الحالية. العملية ذات طبيعة ذرية. وبالتالي، إذا كانت قواعد التفويض تتكون من قواعد غير متوافقة مع السياسة الحالية، فإن الوظيفة تعيد قيمة خاطئة ولا يتم إضافة أي قاعدة سياسة إلى السياسة الحالية. إذا كانت جميع قواعد التفويض متوافقة مع قواعد السياسة، فإن الوظيفة تعيد قيمة صحيحة ويتم إضافة كل قاعدة سياسة إلى السياسة الحالية.

على سبيل المثال:

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

areRulesAdded := e.AddGroupingPolicies(rules)

AddGroupingPoliciesEx()

تقوم وظيفة AddGroupingPoliciesEx بإضافة قواعد توريث الدور إلى السياسة الحالية. إذا كانت القاعدة موجودة بالفعل، فلن يتم إضافة القاعدة. ولكن على عكس AddGroupingPolicies، يتم إضافة القواعد الأخرى غير الموجودة بدلاً من إعادة قيمة خاطئة مباشرةً

على سبيل المثال:

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

AddNamedGroupingPolicy()

تقوم وظيفة AddNamedGroupingPolicy بإضافة قاعدة توريث الدور المسماة إلى السياسة الحالية. إذا كانت القاعدة موجودة بالفعل، فإن الوظيفة تعيد قيمة خاطئة ولن يتم إضافة القاعدة. وإلا فإن الوظيفة تعيد قيمة صحيحة عن طريق إضافة القاعدة الجديدة.

على سبيل المثال:

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

AddNamedGroupingPolicies()

تقوم وظيفة AddNamedGroupingPolicies بإضافة قواعد توريث الدور المسماة إلى السياسة الحالية. العملية ذات طبيعة ذرية. وبالتالي، إذا كانت قواعد التفويض تتكون من قواعد غير متوافقة مع السياسة الحالية، فإن الوظيفة تعيد قيمة خاطئة ولا يتم إضافة أي قاعدة سياسة إلى السياسة الحالية. إذا كانت جميع قواعد التفويض متوافقة مع قواعد السياسة، فإن الوظيفة تعيد قيمة صحيحة ويتم إضافة كل قاعدة سياسة إلى السياسة الحالية.

على سبيل المثال:

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

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

AddNamedGroupingPoliciesEx()

تقوم وظيفة AddNamedGroupingPoliciesEx بإضافة قواعد توريث الدور المسماة إلى السياسة الحالية. إذا كانت القاعدة موجودة بالفعل، فلن يتم إضافة القاعدة. ولكن على عكس AddNamedGroupingPolicies، يتم إضافة القواعد الأخرى غير الموجودة بدلاً من إعادة قيمة خاطئة مباشرةً

على سبيل المثال:

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

RemoveGroupingPolicy()

تقوم وظيفة RemoveGroupingPolicy بإزالة قاعدة توريث الدور من السياسة الحالية.

على سبيل المثال:

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

RemoveGroupingPolicies()

تقوم وظيفة RemoveGroupingPolicies بإزالة قواعد توريث الدور من السياسة الحالية. العملية ذات طبيعة ذرية. وبالتالي، إذا كانت قواعد التفويض تتكون من قواعد غير متوافقة مع السياسة الحالية، فإن الوظيفة تعيد قيمة خاطئة ولا يتم إزالة أي قاعدة سياسة من السياسة الحالية. إذا كانت جميع قواعد التفويض متوافقة مع قواعد السياسة، فإن الوظيفة تعيد قيمة صحيحة ويتم إزالة كل قاعدة سياسة من السياسة الحالية.

على سبيل المثال:

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 بإزالة قواعد توريث الدور المسماة من السياسة الحالية. العملية ذات طبيعة ذرية. وبالتالي، إذا كانت قواعد التفويض تتكون من قواعد غير متوافقة مع السياسة الحالية، فإن الوظيفة تعيد قيمة خاطئة ولا يتم إزالة أي قاعدة سياسة من السياسة الحالية. إذا كانت جميع قواعد التفويض متوافقة مع قواعد السياسة، فإن الوظيفة تعيد قيمة صحيحة ويتم إزالة كل قاعدة سياسة من السياسة الحالية.

على سبيل المثال:

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 بتحميل السياسات المفلترة من ملف/قاعدة بيانات.

على سبيل المثال:

err := e.LoadFilteredPolicy()

LoadIncrementalFilteredPolicy()

تقوم LoadIncrementalFilteredPolicy بإضافة سياسة مفلترة من ملف/قاعدة بيانات.

على سبيل المثال:

err := e.LoadIncrementalFilteredPolicy()

UpdateGroupingPolicy()

تقوم UpdateGroupingPolicy بتحديث oldRule إلى newRule في قسم 'g'

على سبيل المثال:

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

UpdateNamedGroupingPolicy()

تقوم UpdateNamedGroupingPolicy بتحديث oldRule المسمى 'ptype' إلى newRule في قسم 'g'

على سبيل المثال:

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

SetFieldIndex()

يدعم SetFieldIndex تخصيص الاسم التقليدي والموقع لـ 'sub'، 'obj'، 'domain' و 'priority'.

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

على سبيل المثال:

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