2.2 KiB
2.2 KiB
این سند قرارداد جدید endpoint پروفایل دسترسی را توضیح میدهد.
نکته مهم:
- فرانت فقط باید از
matched_rulesاستفاده کند - منبع حقیقت برای فرانت پاسخ API است؛ نه
access_control/apps.py subscription_planممکن است از plan پیشفرض موثر پر شود، حتی اگر روی خود فارم قبلاًnullبوده باشد
1) API پروفایل دسترسی مزرعه
GET /api/access-control/farms/{farm_uuid}/profile/- نیازمند
Authorization: Bearer <access_token>
نمونه پاسخ:
{
"code": 200,
"msg": "success",
"data": {
"farm_uuid": "11111111-1111-1111-1111-111111111111",
"subscription_plan": {
"uuid": "22222222-2222-2222-2222-222222222222",
"code": "gold",
"name": "Gold"
},
"matched_rules": [
{
"code": "gold-full-access",
"name": "Gold Full Access",
"effect": "allow",
"priority": 10
}
],
"resolved_from_profile": true
}
}
2) معنی matched_rules
matched_rulesلیست ruleهایی است که برای آن مزرعه match شدهاند- هر آیتم فعلاً شامل
codeوnameوeffectوpriorityاست - اگر ruleای match نشود، داخل این لیست نمیآید
3) رفتار پیشفرض plan
- plan پیشفرض فارمهای جدید:
gold - اگر روی بعضی فارمهای قدیمی
subscription_planخالی باشد، backend plan موثر پیشفرض را برمیگرداند
4) قرارداد جدید فرانت
- دیگر روی
features[code]یاgroupsچیزی ننویسید - منطق فرانت باید بر اساس
matched_rulesنوشته شود - اگر backend بعداً شکل
matched_rulesرا گسترش دهد، فرانت باید همچنان روی همین فیلد تکیه کند
5) گارد API
گاردهای backend همچنان بر اساس access control کار میکنند. اگر کاربر به APIای دسترسی نداشته باشد، پاسخ:
403 Forbidden
نمونه:
{
"detail": "Access to feature `greenhouse-dashboard` is denied."
}