واجهات برمجة تطبيقات 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
.
- تمرر الواجهة الأمامية
access_token
إلى خادم الخلفية من خلال رأس طلب HTTP. - يسترجع خادم الخلفية معرف المستخدم من
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"
]