RBAC API
واجهة برمجة تطبيقات أكثر ودية لـ RBAC. هذه الواجهة برمجة التطبيقات هي مجموعة فرعية من واجهة برمجة التطبيقات الإدارية. يمكن لمستخدمي RBAC استخدام هذه الواجهة برمجة التطبيقات لتبسيط الكود.
مرجع
المتغير العام e
هو مثيل Enforcer.
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e, err := NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")
const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv')
$e = new Enforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv');
e = casbin.Enforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")
var e = new Enforcer("path/to/model.conf", "path/to/policy.csv");
let mut e = Enforcer::new("examples/rbac_model.conf", "examples/rbac_policy.csv").await?;
Enforcer e = new Enforcer("examples/rbac_model.conf", "examples/rbac_policy.csv");
GetRolesForUser()
GetRolesForUser يحصل على الأدوار التي يمتلكها المستخدم.
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
res := e.GetRolesForUser("alice")
const res = await e.getRolesForUser('alice')
$res = $e->getRolesForUser("alice");
roles = e.get_roles_for_user("alice")
var res = e.GetRolesForUser("alice");
let roles = e.get_roles_for_user("alice", None); // No domain
List<String> res = e.getRolesForUser("alice");
GetUsersForRole()
GetUsersForRole يحصل على المستخدمين الذين يمتلكون دورًا.
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
res := e.GetUsersForRole("data1_admin")
const res = await e.getUsersForRole('data1_admin')
$res = $e->getUsersForRole("data1_admin");
users = e.get_users_for_role("data1_admin")
var res = e.GetUsersForRole("data1_admin");
let users = e.get_users_for_role("data1_admin", None); // No domain
List<String> res = e.getUsersForRole("data1_admin");
HasRoleForUser()
HasRoleForUser يحدد ما إذا كان المستخدم يمتلك دورًا.
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
res := e.HasRoleForUser("alice", "data1_admin")
const res = await e.hasRoleForUser('alice', 'data1_admin')
$res = $e->hasRoleForUser("alice", "data1_admin");
has = e.has_role_for_user("alice", "data1_admin")
var res = e.HasRoleForUser("alice", "data1_admin");
let has = e.has_role_for_user("alice", "data1_admin", None); // No domain
boolean res = e.hasRoleForUser("alice", "data1_admin");
AddRoleForUser()
AddRoleForUser تضيف دورًا للمستخدم. ترجع خطأ إذا كان المستخدم يمتلك الدور بالفعل (أي لم يتأثر).
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.AddRoleForUser("alice", "data2_admin")
await e.addRoleForUser('alice', 'data2_admin')
$e->addRoleForUser("alice", "data2_admin");
e.add_role_for_user("alice", "data2_admin")
var added = e.AddRoleForUser("alice", "data2_admin");
or
var added = await e.AddRoleForUserAsync("alice", "data2_admin");
let added = e.add_role_for_user("alice", "data2_admin", None).await?; // No domain
boolean added = e.addRoleForUser("alice", "data2_admin");
AddRolesForUser()
AddRolesForUser تضيف أدواراً متعددة للمستخدم. ترجع خطأ إذا كان المستخدم يمتلك أحد هذه الأدوار بالفعل (أي لم يتأثر).
على سبيل المثال:
- Go
- Node.js
- Rust
var roles = []string{"data2_admin", "data1_admin"}
e.AddRolesForUser("alice", roles)
const roles = ["data1_admin", "data2_admin"];
roles.map((role) => e.addRoleForUser("alice", role));
let roles = vec!["data1_admin".to_owned(), "data2_admin".to_owned()];
let all_added = e.add_roles_for_user("alice", roles, None).await?; // No domain
DeleteRoleForUser()
DeleteRoleForUser تحذف دورًا للمستخدم. ترجع خطأ إذا لم يمتلك المستخدم الدور (أي لم يتأثر).
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeleteRoleForUser("alice", "data1_admin")
await e.deleteRoleForUser('alice', 'data1_admin')
$e->deleteRoleForUser("alice", "data1_admin");
e.delete_role_for_user("alice", "data1_admin")
var deleted = e.DeleteRoleForUser("alice", "data1_admin");
or
var deleted = await e.DeleteRoleForUser("alice", "data1_admin");
let deleted = e.delete_role_for_user("alice", "data1_admin", None).await?; // No domain
boolean deleted = e.deleteRoleForUser("alice", "data1_admin");
DeleteRolesForUser()
تقوم DeleteRolesForUser بحذف جميع الأدوار لمستخدم ما. تُرجع قيمة خاطئة إذا لم يكن لدى المستخدم أي أدوار (أي لم يتأثر).
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeleteRolesForUser("alice")
await e.deleteRolesForUser('alice')
$e->deleteRolesForUser("alice");
e.delete_roles_for_user("alice")
var deletedAtLeastOne = e.DeleteRolesForUser("alice");
or
var deletedAtLeastOne = await e.DeleteRolesForUserAsync("alice");
let deleted_at_least_one = e.delete_roles_for_user("alice", None).await?; // No domain
boolean deletedAtLeastOne = e.deleteRolesForUser("alice");
DeleteUser()
تقوم DeleteUser بحذف مستخدم. تُرجع قيمة خاطئة إذا لم يكن المستخدم موجودًا (أي لم يتأثر).
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeleteUser("alice")
await e.deleteUser('alice')
$e->deleteUser("alice");
e.delete_user("alice")
var deleted = e.DeleteUser("alice");
or
var deleted = await e.DeleteUserAsync("alice");
let deleted = e.delete_user("alice").await?;
boolean deleted = e.deleteUser("alice");
DeleteRole()
DeleteRole
يحذف دورًا.
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeleteRole("data2_admin")
await e.deleteRole("data2_admin")
$e->deleteRole("data2_admin");
e.delete_role("data2_admin")
var deleted = e.DeleteRole("data2_admin");
or
var deleted = await e.DeleteRoleAsync("data2_admin");
let deleted = e.delete_role("data2_admin").await?;
e.deleteRole("data2_admin");
DeletePermission()
DeletePermission
يحذف إذنًا.
يعيد خطأ إذا لم يكن الإذن موجودًا (أي لم يتأثر).
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeletePermission("read")
await e.deletePermission('read')
$e->deletePermission("read");
e.delete_permission("read")
var deleted = e.DeletePermission("read");
or
var deleted = await e.DeletePermissionAsync("read");
let deleted = e.delete_permission(vec!["read".to_owned()]).await?;
boolean deleted = e.deletePermission("read");
AddPermissionForUser()
AddPermissionForUser
يضيف إذنًا لمستخدم أو دور.
يعيد خطأ إذا كان المستخدم أو الدور يمتلكون الإذن بالفعل (أي لم يتأثر).
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.AddPermissionForUser("bob", "read")
await e.addPermissionForUser('bob', 'read')
$e->addPermissionForUser("bob", "read");
e.add_permission_for_user("bob", "read")
var added = e.AddPermissionForUser("bob", "read");
or
var added = await e.AddPermissionForUserAsync("bob", "read");
let added = e.add_permission_for_user("bob", vec!["read".to_owned()]).await?;
boolean added = e.addPermissionForUser("bob", "read");
AddPermissionsForUser()
تضيف إضافةصلاحياتللمستخدم عدة صلاحيات لمستخدم أو دور. ترجع كاذبة إذا كان المستخدم أو الدور يمتلك بالفعل إحدى الصلاحيات (أي لم يتأثر).
على سبيل المثال:
- Go
- Node.js
- Rust
var permissions = [][]string{{"data1", "read"},{"data2","write"}}
for i := 0; i < len(permissions); i++ {
e.AddPermissionsForUser("alice", permissions[i])
}
const permissions = [
["data1", "read"],
["data2", "write"],
];
permissions.map((permission) => e.addPermissionForUser("bob", ...permission));
let permissions = vec![
vec!["data1".to_owned(), "read".to_owned()],
vec!["data2".to_owned(), "write".to_owned()],
];
let all_added = e.add_permissions_for_user("bob", permissions).await?;
DeletePermissionForUser()
تحذف حذفصلاحيةللمستخدم صلاحية لمستخدم أو دور. ترجع كاذبة إذا لم يمتلك المستخدم أو الدور الصلاحية (أي لم يتأثر).
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeletePermissionForUser("bob", "read")
await e.deletePermissionForUser("bob", "read")
$e->deletePermissionForUser("bob", "read");
e.delete_permission_for_user("bob", "read")
var deleted = e.DeletePermissionForUser("bob", "read");
or
var deleted = await e.DeletePermissionForUserAsync("bob", "read");
let deleted = e.delete_permission_for_user("bob", vec!["read".to_owned()]).await?;
boolean deleted = e.deletePermissionForUser("bob", "read");
DeletePermissionsForUser()
تحذف حذفصلاحياتللمستخدم صلاحيات لمستخدم أو دور. يُرجع خطأ إذا لم يكن للمستخدم أو الدور أي صلاحيات (أي غير متأثر).
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeletePermissionsForUser("bob")
await e.deletePermissionsForUser('bob')
$e->deletePermissionsForUser("bob");
e.delete_permissions_for_user("bob")
var deletedAtLeastOne = e.DeletePermissionsForUser("bob");
or
var deletedAtLeastOne = await e.DeletePermissionsForUserAsync("bob");
let deleted_at_least_one = e.delete_permissions_for_user("bob").await?;
boolean deletedAtLeastOne = e.deletePermissionForUser("bob");
GetPermissionsForUser()
تحصل GetPermissionsForUser على الصلاحيات لمستخدم أو دور.
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Java
e.GetPermissionsForUser("bob")
await e.getPermissionsForUser('bob')
$e->getPermissionsForUser("bob");
e.get_permissions_for_user("bob")
var permissions = e.GetPermissionsForUser("bob");
List<List<String>> permissions = e.getPermissionsForUser("bob");
HasPermissionForUser()
تحدد HasPermissionForUser ما إذا كان للمستخدم صلاحية.
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.HasPermissionForUser("alice", []string{"read"})
await e.hasPermissionForUser('alice', 'read')
$e->hasPermissionForUser("alice", []string{"read"});
has = e.has_permission_for_user("alice", "read")
var has = e.HasPermissionForUser("bob", "read");
let has = e.has_permission_for_user("alice", vec!["data1".to_owned(), "read".to_owned()]);
boolean has = e.hasPermissionForUser("alice", "read");
GetImplicitRolesForUser()
تحصل GetImplicitRolesForUser على الأدوار الضمنية التي يمتلكها المستخدم. مقارنة بـ GetRolesForUser()، تسترجع هذه الوظيفة الأدوار الغير مباشرة بالإضافة إلى الأدوار المباشرة.
على سبيل المثال:
g, alice, role:admin
g, role:admin, role:user
GetRolesForUser("alice") يمكنه فقط الحصول على: ["role:admin"].\ لكن GetImplicitRolesForUser("alice") سيحصل على: ["role:admin", "role:user"].
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.GetImplicitRolesForUser("alice")
await e.getImplicitRolesForUser("alice")
$e->getImplicitRolesForUser("alice");
e.get_implicit_roles_for_user("alice")
var implicitRoles = e.GetImplicitRolesForUser("alice");
e.get_implicit_roles_for_user("alice", None); // No domain
List<String> implicitRoles = 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"].
على سبيل المثال:
- Go
- Node.js
- Java
users := e.GetImplicitUsersForRole("role:user")
const users = e.getImplicitUsersForRole("role:user");
List<String> 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"]].
على سبيل المثال:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.GetImplicitPermissionsForUser("alice")
await e.getImplicitPermissionsForUser("alice")
$e->getImplicitPermissionsForUser("alice");
e.get_implicit_permissions_for_user("alice")
var implicitPermissions = e.GetImplicitPermissionsForUser("alice");
e.get_implicit_permissions_for_user("alice", None); // No domain
List<List<String>> implicitPermissions = 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")
على سبيل المثال:
- Go
- Python
e.GetNamedImplicitPermissionsForUser("p2","alice")
e.get_named_implicit_permissions_for_user("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"]
على سبيل المثال:
- Go
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") ستُرجع
- Go
resources, err := e.GetImplicitResourcesForUser("alice")
GetImplicitUsersForPermission()
تحصل GetImplicitUsersForPermission على المستخدمين الضمنيين لإذن معين.
على سبيل المثال:
p, admin, data1, read
p, bob, data1, read
g, alice, admin
GetImplicitUsersForPermission("data1", "read") ستُرجع: ["alice", "bob"]
.
ملاحظة: سيتم إرجاع المستخدمين فقط، والأدوار (الوسيط الثاني في "g") سيتم استبعادها.
- Go
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
ملاحظة:
البادئة: يمكنك تخصيص البادئة لشروط الكائنات، و"r.obj." يُستخدم بشكل شائع كبادئة. بعد إزالة البادئة، الجزء المتبقي هو شرط الكائن. إذا كان هناك سياسة كائن لا تلبي متطلبات البادئة، سيتم إرجاع
errors.ERR_OBJ_CONDITION
.إذا كانت مصفوفة 'objectConditions' فارغة، أرجع
errors.ERR_EMPTY_CONDITION
- Go
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
.
- Go
ImplicitUsers, err := e.GetImplicitUsersForResource("data2")
سيتم إرجاع المستخدمين فقط، وسيتم استبعاد الأدوار (الوسيط الثاني في "g").