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

واجهات برمجة تطبيقات Casbin المعرضة

مقدمة

لنفترض أن واجهة تطبيقك الأمامية قد حصلت على access_token للمستخدم المسجل الدخول وتريد الآن التحقق من صحة المستخدم لبعض الوصول. لا يمكنك ببساطة وضع access_token في رأس طلب HTTP لاستخدام هذه الواجهات لأن Casdoor تستخدم حقل Authorization للتحقق من إذن الوصول. مثل أي واجهات API أخرى توفرها Casdoor، يتكون حقل Authorization من معرف عميل التطبيق والسر، باستخدام نظام المصادقة الأساسي لـ HTTP. يبدو مثل Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>. لهذا السبب، يجب أن يتم استدعاء واجهات برمجة تطبيقات Casbin بواسطة خادم الخلفية للتطبيق. إليك الخطوات حول كيفية القيام بذلك.

خذ تطبيق app-vue-python-example في موقع العرض التوضيحي على سبيل المثال، يجب أن يكون رأس التفويض: Authorization: Basic 294b09fbc17f95daf2fe dd8982f7046ccba1bbd7851d5c1ece4e52bf039d.

  1. تمرر الواجهة الأمامية access_token إلى خادم الخلفية من خلال رأس طلب HTTP.
  2. يسترجع خادم الخلفية معرف المستخدم من access_token.

كملاحظة مسبقة، هذه الواجهات مصممة أيضًا (للآن) لنموذج (sub, obj, act). يتكون permissionId في معاملات URL من هوية سياسة الإذن المطبقة، والتي تتكون من اسم المنظمة واسم سياسة الإذن (أي، اسم المنظمة/اسم الإذن). الجسم هو تنسيق الطلب المحدد بواسطة نموذج Casbin للإذن، والذي يمثل عادة sub، obj و act على التوالي.

بالإضافة إلى واجهة API لطلب تطبيق السيطرة على الأذونات، توفر Casdoor أيضًا واجهات أخرى تساعد التطبيقات الخارجية على الحصول على معلومات سياسة الأذونات، والتي يتم سردها هنا أيضًا.

تطبيق القواعد

طلب:

curl --location --request POST 'http://localhost:8000/api/enforce?permissionId=example-org/example-permission' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>' \
--data-raw '["example-org/example-user", "example-resource", "example-action"]'

استجابة:

{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
true
],
"data2": null
}

BatchEnforce

طلب:

curl --location --request POST 'http://localhost:8000/api/batch-enforce?permissionId=example-org/example-permission' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>' \
--data-raw '[["example-org/example-user", "example-resource", "example-action"], ["example-org/example-user2", "example-resource", "example-action"], ["example-org/example-user3", "example-resource", "example-action"]]'

استجابة:

{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
[
true,
true,
false
]
],
"data2": null
}

GetAllObjects

طلب:

curl --location --request GET 'http://localhost:8000/api/get-all-objects' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

استجابة:

[
"app-built-in"
]

GetAllActions

طلب:

curl --location --request GET 'http://localhost:8000/api/get-all-actions' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

استجابة:

[
"read",
"write",
"admin"
]

GetAllRoles

طلب:

curl --location --request GET 'http://localhost:8000/api/get-all-roles' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

استجابة:

[
"role_kcx66l"
]