
مكتبة تفويض تفرض نماذج ACL وRBAC وABAC ونماذج تحكم وصول مخصصة، مع واجهات برمجة تطبيقات RESTful للمطابقة وإدارة السياسات للتطبيقات والخدمات.
أخبار: هل ما زلت تقلق بشأن كيفية كتابة سياسة Apache Casbin الصحيحة؟ Apache Casbin online editor قادم لمساعدتك! جرّبه على: https://casbin.apache.org/editor/

Apache Casbin هي مكتبة مفتوحة المصدر قوية وفعّالة للتحكم في الوصول لمشاريع Golang. توفر دعمًا لفرض التفويض استنادًا إلى نماذج التحكم في الوصول المختلفة.
write-article و read-log. لا يتحكم هذا النموذج في الوصول إلى مقالة أو سجل معين.resource.Owner للحصول على سمة أحد الموارد./res/* و /res/:id وطرق HTTP مثل GET و POST و PUT و .في Casbin، يتم تجريد نموذج التحكم في الوصول إلى ملف CONF استنادًا إلى النموذج الفوقي PERM (السياسة، التأثير، الطلب، المطابقات). لذا فإن تبديل آلية التفويض لمشروع ما أو ترقيتها يكون ببساطة تعديل إعداد. يمكنك تخصيص نموذج التحكم في الوصول الخاص بك من خلال الجمع بين النماذج المتاحة. على سبيل المثال، يمكنك الجمع بين أدوار RBAC وسمات ABAC معًا داخل نموذج واحد ومشاركة مجموعة واحدة من قواعد السياسة.
النموذج الأساسي والأبسط في Casbin هو ACL. ملف CONF لنموذج ACL هو:
# Request definition
[request_definition]
r = sub, obj, act
# Policy definition
[policy_definition]
p = sub, obj, act
# Policy effect
[policy_effect]
e = some(where (p.eft == allow))
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
مثال على سياسة لنموذج ACL:
p, alice, data1, read
p, bob, data2, write
وهذا يعني:
كما ندعم وضع الأسطر المتعددة بإلحاق '\' في النهاية:
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
علاوة على ذلك، إذا كنت تستخدم ABAC، يمكنك تجربة عامل التشغيل in كما يلي في إصدار Casbin golang (إصدارا jCasbin وNode-Casbin غير مدعومين بعد):
# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
لكن يجب عليك التأكد من أن طول المصفوفة أكبر من 1، وإلا فسيتسبب ذلك في حدوث panic.
لمزيد من عوامل التشغيل، يمكنك إلقاء نظرة على govaluate
ما تقوم به Apache Casbin:
{subject, object, action} أو بصيغة مخصصة كما حددتها، مع دعم كل من تفويضات السماح والرفض.root أو administrator. يمكن للمستخدم الخارق فعل أي شيء دون أذونات صريحة.keyMatch تعيين مفتاح مورد مثل /foo/bar إلى النمط /foo*.ما لا تقوم به Apache Casbin:
username و password عند تسجيل دخول المستخدم)go get github.com/casbin/casbin/v3
https://casbin.apache.org/docs/overview
يمكنك أيضًا استخدام المحرر عبر الإنترنت (https://casbin.apache.org/editor/) لكتابة نموذج وسياسة Casbin في متصفح الويب الخاص بك. يوفر وظائف مثل syntax highlighting و code completion، تمامًا مثل IDE للغة برمجة.
https://casbin.apache.org/docs/tutorials
أنشئ مُنفِّذ Casbin جديدًا باستخدام ملف نموذج وملف سياسة:
e, _ := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
ملاحظة: يمكنك أيضًا تهيئة مُنفِّذ مع سياسة في قاعدة بيانات بدلاً من ملف، راجع قسم تخزين السياسات للتفاصيل.
أضف خطاف فرض إلى الكود الخاص بك مباشرة قبل حدوث الوصول:
sub := "alice" // the user that wants to access a resource.
obj := "data1" // the resource that is going to be accessed.
act := "read" // the operation that the user performs on the resource.
if res, _ := e.Enforce(sub, obj, act); res {
// permit alice to read data1
} else {
// deny the request, show an error
}
بالإضافة إلى ملف السياسة الثابت، توفر Apache Casbin أيضًا واجهة برمجة تطبيقات (API) لإدارة الأذونات في وقت التشغيل. على سبيل المثال، يمكنك الحصول على جميع الأدوار المخصصة لمستخدم كما يلي:
roles, _ := e.GetImplicitRolesForUser(sub)
راجع واجهات إدارة السياسات لمزيد من الاستخدامات.
توفر Apache Casbin مجموعتين من واجهات برمجة التطبيقات (API) لإدارة الأذونات:
كما نوفر واجهة مستخدم قائمة على الويب لإدارة النماذج وإدارة السياسات:


https://casbin.apache.org/docs/adapters
https://casbin.apache.org/docs/watchers
https://casbin.apache.org/docs/role-managers
https://casbin.apache.org/docs/benchmark
برمجيات Authz الوسيطة لأطر الويب: https://casbin.apache.org/docs/middlewares
https://casbin.apache.org/docs/adopters
يرجى قراءة دليل المساهمة.
هذا المشروع موجود بفضل جميع الأشخاص الذين يساهمون فيه.
هذا المشروع مرخص بموجب رخصة Apache 2.0.
إذا كانت لديك أي مشكلات أو طلبات ميزات، فيرجى التواصل معنا. نرحب بـ PR.
![]() | ![]() | ![]() | ![]() |
|---|
| Casbin | jCasbin | node-Casbin | PHP-Casbin |
| جاهز للإنتاج | جاهز للإنتاج | جاهز للإنتاج | جاهز للإنتاج |
![]() | ![]() | ![]() | ![]() |
|---|
| PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
| جاهز للإنتاج | جاهز للإنتاج | جاهز للإنتاج | جاهز للإنتاج |
DELETE| النموذج | ملف النموذج | ملف السياسة |
|---|
| ACL | basic_model.conf | basic_policy.csv |
| ACL مع مستخدم خارق | basic_model_with_root.conf | basic_policy.csv |
| ACL بدون مستخدمين | basic_model_without_users.conf | basic_policy_without_users.csv |
| ACL بدون موارد | basic_model_without_resources.conf | basic_policy_without_resources.csv |
| RBAC | rbac_model.conf | rbac_policy.csv |
| RBAC مع أدوار الموارد | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| RBAC مع النطاقات/المستأجرين | rbac_model_with_domains.conf | rbac_policy_with_domains.csv |
| ABAC | abac_model.conf | N/A |
| RESTful | keymatch_model.conf | keymatch_policy.csv |
| تجاوز الرفض | rbac_model_with_deny.conf | rbac_policy_with_deny.csv |
| الأولوية | priority_model.conf | priority_policy.csv |