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

RBAC API

واجهة برمجة تطبيقات أكثر ودية لـ RBAC. هذه الواجهة برمجة التطبيقات هي مجموعة فرعية من واجهة برمجة التطبيقات الإدارية. يمكن لمستخدمي RBAC استخدام هذه الواجهة برمجة التطبيقات لتبسيط الكود.

مرجع

المتغير العام e هو مثيل Enforcer.

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

GetRolesForUser()

GetRolesForUser يحصل على الأدوار التي يمتلكها المستخدم.

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

res := e.GetRolesForUser("alice")

GetUsersForRole()

GetUsersForRole يحصل على المستخدمين الذين يمتلكون دورًا.

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

res := e.GetUsersForRole("data1_admin")

HasRoleForUser()

HasRoleForUser يحدد ما إذا كان المستخدم يمتلك دورًا.

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

res := e.HasRoleForUser("alice", "data1_admin")

AddRoleForUser()

AddRoleForUser تضيف دورًا للمستخدم. ترجع خطأ إذا كان المستخدم يمتلك الدور بالفعل (أي لم يتأثر).

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

e.AddRoleForUser("alice", "data2_admin")

AddRolesForUser()

AddRolesForUser تضيف أدواراً متعددة للمستخدم. ترجع خطأ إذا كان المستخدم يمتلك أحد هذه الأدوار بالفعل (أي لم يتأثر).

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

var roles = []string{"data2_admin", "data1_admin"}
e.AddRolesForUser("alice", roles)

DeleteRoleForUser()

DeleteRoleForUser تحذف دورًا للمستخدم. ترجع خطأ إذا لم يمتلك المستخدم الدور (أي لم يتأثر).

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

e.DeleteRoleForUser("alice", "data1_admin")

DeleteRolesForUser()

تقوم DeleteRolesForUser بحذف جميع الأدوار لمستخدم ما. تُرجع قيمة خاطئة إذا لم يكن لدى المستخدم أي أدوار (أي لم يتأثر).

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

e.DeleteRolesForUser("alice")

DeleteUser()

تقوم DeleteUser بحذف مستخدم. تُرجع قيمة خاطئة إذا لم يكن المستخدم موجودًا (أي لم يتأثر).

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

e.DeleteUser("alice")

DeleteRole()

DeleteRole يحذف دورًا.

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

e.DeleteRole("data2_admin")

DeletePermission()

DeletePermission يحذف إذنًا. يعيد خطأ إذا لم يكن الإذن موجودًا (أي لم يتأثر).

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

e.DeletePermission("read")

AddPermissionForUser()

AddPermissionForUser يضيف إذنًا لمستخدم أو دور. يعيد خطأ إذا كان المستخدم أو الدور يمتلكون الإذن بالفعل (أي لم يتأثر).

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

e.AddPermissionForUser("bob", "read")

AddPermissionsForUser()

تضيف إضافةصلاحياتللمستخدم عدة صلاحيات لمستخدم أو دور. ترجع كاذبة إذا كان المستخدم أو الدور يمتلك بالفعل إحدى الصلاحيات (أي لم يتأثر).

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

var permissions = [][]string{{"data1", "read"},{"data2","write"}}
for i := 0; i < len(permissions); i++ {
e.AddPermissionsForUser("alice", permissions[i])
}

DeletePermissionForUser()

تحذف حذفصلاحيةللمستخدم صلاحية لمستخدم أو دور. ترجع كاذبة إذا لم يمتلك المستخدم أو الدور الصلاحية (أي لم يتأثر).

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

e.DeletePermissionForUser("bob", "read")

DeletePermissionsForUser()

تحذف حذفصلاحياتللمستخدم صلاحيات لمستخدم أو دور. يُرجع خطأ إذا لم يكن للمستخدم أو الدور أي صلاحيات (أي غير متأثر).

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

e.DeletePermissionsForUser("bob")

GetPermissionsForUser()

تحصل GetPermissionsForUser على الصلاحيات لمستخدم أو دور.

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

e.GetPermissionsForUser("bob")

HasPermissionForUser()

تحدد HasPermissionForUser ما إذا كان للمستخدم صلاحية.

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

e.HasPermissionForUser("alice", []string{"read"})

GetImplicitRolesForUser()

تحصل GetImplicitRolesForUser على الأدوار الضمنية التي يمتلكها المستخدم. مقارنة بـ GetRolesForUser()، تسترجع هذه الوظيفة الأدوار الغير مباشرة بالإضافة إلى الأدوار المباشرة.

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

g, alice, role:admin  
g, role:admin, role:user

GetRolesForUser("alice") يمكنه فقط الحصول على: ["role:admin"].\ لكن GetImplicitRolesForUser("alice") سيحصل على: ["role:admin", "role:user"].

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

e.GetImplicitRolesForUser("alice")

GetImplicitUsersForRole()

GetImplicitUsersForRole تحصل على جميع المستخدمين الذين يرثون الدور. مقارنة بـ GetUsersForRole()، تسترجع هذه الوظيفة المستخدمين غير المباشرين.

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

g, alice, role:admin  
g, role:admin, role:user

GetUsersForRole("role:user") يمكنه فقط الحصول على: ["role:admin"].\ لكن GetImplicitUesrsForRole("role:user") سيحصل على: ["role:admin", "alice"].

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

users := e.GetImplicitUsersForRole("role:user")

GetImplicitPermissionsForUser()

GetImplicitPermissionsForUser يحصل على الصلاحيات الضمنية لمستخدم أو دور.\ مقارنة بـ GetPermissionsForUser()، تسترجع هذه الوظيفة الصلاحيات للأدوار الموروثة.

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

p, admin, data1, read  
p, alice, data2, read
g, alice, admin

GetPermissionsForUser("alice") يمكنه فقط الحصول على: [["alice", "data2", "read"]].\ لكن GetImplicitPermissionsForUser("alice") سيحصل على: [["admin", "data1", "read"], ["alice", "data2", "read"]].

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

e.GetImplicitPermissionsForUser("alice")

GetNamedImplicitPermissionsForUser()

GetNamedImplicitPermissionsForUser تحصل على الصلاحيات الضمنية لمستخدم أو دور بواسطة سياسة مسماة

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

p, admin, data1, read
p2, admin, create
g, alice, admin

GetImplicitPermissionsForUser("alice") يحصل فقط على: [["admin", "data1", "read"]]، والتي تكون سياستها الافتراضية "p"

لكن يمكنك تحديد السياسة على أنها "p2" للحصول على: [["admin", "create"]] بواسطة GetNamedImplicitPermissionsForUser("p2","alice")

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

e.GetNamedImplicitPermissionsForUser("p2","alice")

GetDomainsForUser()

GetDomainsForUser تحصل على جميع المجالات التي يمتلكها المستخدم.

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

p, admin, domain1, data1, read
p, admin, domain2, data2, read
p, admin, domain2, data2, write
g, alice, admin, domain1
g, alice, admin, domain2

GetDomainsForUser("alice") يمكن أن يحصل على ["domain1", "domain2"]

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

result, err := e.GetDomainsForUser("alice")

GetImplicitResourcesForUser()

تُرجع GetImplicitResourcesForUser جميع السياسات التي يجب أن تكون صحيحة للمستخدم.

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

p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write

g, alice, data2_admin

GetImplicitResourcesForUser("alice") ستُرجع

resources, err := e.GetImplicitResourcesForUser("alice")

GetImplicitUsersForPermission()

تحصل GetImplicitUsersForPermission على المستخدمين الضمنيين لإذن معين.

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

p, admin, data1, read
p, bob, data1, read
g, alice, admin

GetImplicitUsersForPermission("data1", "read") ستُرجع: ["alice", "bob"].

ملاحظة: سيتم إرجاع المستخدمين فقط، والأدوار (الوسيط الثاني في "g") سيتم استبعادها.

users, err := e.GetImplicitUsersForPermission("data1", "read")

GetAllowedObjectConditions()

GetAllowedObjectConditions تُرجع مصفوفة نصية من شروط الكائنات التي يمكن للمستخدم الوصول إليها.

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

p, alice, r.obj.price < 25, read
p, admin, r.obj.category_id = 2, read
p, bob, r.obj.author = bob, write

g, alice, admin

e.GetAllowedObjectConditions("alice", "read", "r.obj.") سيُرجع ["price < 25", "category_id = 2"], nil

ملاحظة:

  1. البادئة: يمكنك تخصيص البادئة لشروط الكائنات، و"r.obj." يُستخدم بشكل شائع كبادئة. بعد إزالة البادئة، الجزء المتبقي هو شرط الكائن. إذا كان هناك سياسة كائن لا تلبي متطلبات البادئة، سيتم إرجاع errors.ERR_OBJ_CONDITION.

  2. إذا كانت مصفوفة 'objectConditions' فارغة، أرجع errors.ERR_EMPTY_CONDITION

conditions, err := e.GetAllowedObjectConditions("alice", "read", "r.obj.")

GetImplicitUsersForResource()

تُرجع GetImplicitUsersForResource المستخدمين الضمنيين بناءً على المورد.

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

p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write
g, alice, data2_admin

ستُرجع GetImplicitUsersForResource("data2") [["bob", "data2", "write"], ["alice", "data2", "read"] ["alice", "data2", "write"]], nil.

ستُرجع GetImplicitUsersForResource("data1") [["alice", "data1", "read"]], nil.

ImplicitUsers, err := e.GetImplicitUsersForResource("data2")
ملاحظة

سيتم إرجاع المستخدمين فقط، وسيتم استبعاد الأدوار (الوسيط الثاني في "g").