132 lines
7.1 KiB
Markdown
132 lines
7.1 KiB
Markdown
# پلن حذف BFFها — اتصال مستقیم فرانتاند به CMS
|
||
|
||
> تاریخ: February 10, 2026
|
||
|
||
---
|
||
|
||
## 📊 خلاصه وضعیت
|
||
|
||
### یافتههای کلیدی:
|
||
1. **هر دو فرانت (BackOffice + FrontOffice) الان از protoهای CMS مستقیم استفاده میکنن** — مهاجرت proto انجام شده
|
||
2. **CMS خودش `VerifyOtpToken` و `AcceptContract` composite handler داره** — فقط یه `TODO` در AcceptContract برای JWT generation
|
||
3. **CMS خودش `IPaymentGatewayService` + `DayaPaymentService` داره** — PYMS جداگانه لازم نیست
|
||
4. **CMS خودش Kavenegar + SignalR Hub داره** — آمادهست
|
||
5. **CMS خودش `ICurrentUserService` داره** — Security logic آمادهست
|
||
|
||
---
|
||
|
||
## فاز ۱ — حذف BackOffice.BFF ✅ (انجام میشه الان)
|
||
|
||
### ✅ تسک ۱.۱ — Permission Interceptor (انتقال)
|
||
**وضعیت**: ✅ **انجام شد**
|
||
|
||
**چیزی که هست (BFF)**:
|
||
- `RequiresPermissionAttribute` — Attribute برای mark کردن gRPC methods
|
||
- `PermissionInterceptor` — gRPC interceptor که attribute ها رو چک میکنه
|
||
- `IPermissionService` + `PermissionService` — Role رو از JWT میخونه
|
||
- `RolePermissionConfig` — ماتریس Role→Permission (3 نقش × 34 permission)
|
||
|
||
**نقشها**: SuperAdmin (Administrator), Admin, Inspector
|
||
**مجوزها**: 34 مجوز در 9 دسته (Dashboard, Orders, Products, Users, Commission, PublicMessages, ManualPayments, Settings, Reports)
|
||
|
||
**فایلهای ساخته شده:**
|
||
- `Application/Common/Authorization/RequiresPermissionAttribute.cs`
|
||
- `Application/Common/Authorization/PermissionDefinitions.cs`
|
||
- `Application/Common/Authorization/IPermissionService.cs`
|
||
- `Infrastructure/Services/Authorization/PermissionService.cs`
|
||
- `WebApi/Interceptors/PermissionInterceptor.cs`
|
||
|
||
**Attributeهای اضافه شده (۲۱ عدد بر روی ۴ سرویس):**
|
||
- `AppVersionService`: GetAppVersion(settings.view), GetAllAppVersions(settings.view), UpdateAppVersion(settings.manage_configuration)
|
||
- `ConfigurationService`: GetAllConfigurations(settings.view), CreateOrUpdateConfiguration(settings.manage_configuration), DeactivateConfiguration(settings.manage_configuration)
|
||
- `ManualPaymentService`: CreateManualPayment(manualpayments.create), ApproveManualPayment(manualpayments.approve), RejectManualPayment(manualpayments.approve), GetAllManualPayments(manualpayments.view), ProcessManualMembershipPayment(manualpayments.create)
|
||
- `UserOrderService`: CreateNewUserOrder(orders.create), UpdateUserOrder(orders.update), DeleteUserOrder(orders.delete), GetUserOrder(orders.view), GetAllUserOrderByFilter(orders.view), UpdateOrderStatus(orders.update), GetOrdersByDateRange(reports.view), ApplyDiscountToOrder(orders.update), CalculateOrderPV(orders.view), CancelOrder(orders.cancel)
|
||
|
||
### ❌ تسک ۱.۲ — AfrinoIDP OTP (بعداً)
|
||
**وضعیت**: **پلن شده — فعلاً نیاز نیست**
|
||
|
||
BackOffice ادمین لاگین از طریق `https://ids.afrino.co` (AfrinoIDP) انجام میشه.
|
||
این یه external identity provider هست — فرانت BackOffice خودش مستقیم با AfrinoIDP ارتباط داره (OIDC flow).
|
||
CMS فقط JWT رو validate میکنه — نیازی به proxy نداره.
|
||
|
||
### ✅ تسک ۱.۳ — تغییر GwUrl
|
||
**وضعیت**: ✅ **نیاز نبود — قبلاً انجام شده بود**
|
||
|
||
| فایل | از | به |
|
||
|------|-----|-----|
|
||
| `BackOffice/wwwroot/appsettings.json` | `https://localhost:32846` | `https://localhost:32846` (بدون تغییر — dev) |
|
||
| `BackOffice/wwwroot/appsettings.Staging.json` | ✅ **قبلاً** `https://cms.se.kbs1.ir` | بدون تغییر |
|
||
|
||
> BackOffice Staging **قبلاً مستقیم به CMS وصله!** فقط dev (localhost) هنوز BFF روی همون پورته.
|
||
|
||
---
|
||
|
||
## فاز ۲ — حذف FrontOffice.BFF ✅ (انجام میشه الان)
|
||
|
||
### ✅ تسک ۲.۱ — Kavenegar SMS
|
||
**وضعیت**: ✅ **قبلاً در CMS هست** — `IKavenegarService` + `KavenegarService`
|
||
|
||
### ✅ تسک ۲.۲ — SignalR Token Relay
|
||
**وضعیت**: ✅ **انجام شد** — آلیاس `/hubs/token-relay` در CMS اضافه شد
|
||
|
||
**وضعیت فعلی**:
|
||
- CMS Hub: `/hubs/token-notification` (اصلی ✅)
|
||
- CMS Hub: `/hubs/token-relay` (آلیاس برای backward compatibility ✅)
|
||
- FrontOffice Staging: `HubPath` → `/hubs/token-notification` ✅
|
||
|
||
### ✅ تسک ۲.۳ — VerifyOtp + AcceptContract composite
|
||
**وضعیت**: ✅ **کامل شد**
|
||
|
||
- `VerifyOtpTokenCommandHandler` — OTP verify + JWT generation ✅
|
||
- `AcceptContractCommandHandler` — Contract create + OTP verify + JWT generation ✅ (TODO فیکس شد → `IGenerateJwtToken` واقعی)
|
||
|
||
### ✅ تسک ۲.۴ — PYMS (Zarinpal Payment)
|
||
**وضعیت**: ✅ **نیاز نیست**
|
||
|
||
**دلیل**: FrontOffice **الان از CMS `TransactionsContract.CustomerPaymentRequest/Verification` استفاده میکنه** — مستقیم PYMS صدا نمیزنه.
|
||
CMS هم از `IPaymentGatewayService` (DayaPaymentService) برای payment استفاده میکنه.
|
||
PYMS فقط در BFF بود — فرانت هیچوقت مستقیم PYMS صدا نمیزنه.
|
||
|
||
### ✅ تسک ۲.۵ — Security Logic (currentUserId injection)
|
||
**وضعیت**: ✅ **قبلاً در CMS هست**
|
||
|
||
CMS `ICurrentUserService` رو inject میکنه و `GetCurrentUserId()` helper در همه Customer سرویسها هست:
|
||
- UserService ✅
|
||
- UserOrderService ✅
|
||
- UserWalletService ✅
|
||
- TransactionsService ✅
|
||
- PackageService ✅
|
||
- ClubMembershipService ✅
|
||
- ConfigurationService ✅
|
||
|
||
### ✅ تسک ۲.۶ — تغییر GwUrl FrontOffice
|
||
**وضعیت**: ✅ **انجام شد**
|
||
|
||
| فایل | از | به |
|
||
|------|-----|-----|
|
||
| `FrontOffice/appsettings.Staging.json` | `https://frontoffice-bff.se.kbs1.ir` | ✅ `https://cms.se.kbs1.ir` |
|
||
| `FrontOffice/appsettings.Staging.json` HubPath | `/hubs/token-relay` | ✅ `/hubs/token-notification` |
|
||
| `FrontOffice/appsettings.json` | `https://localhost:32846` | بدون تغییر (dev) |
|
||
|
||
---
|
||
|
||
## خلاصه کارهای واقعی
|
||
|
||
### ✅ همه تسکها انجام شد:
|
||
1. ✅ Permission Interceptor infrastructure + DI + gRPC pipeline
|
||
2. ✅ `[RequiresPermission]` attributes روی ۲۱ endpoint در ۴ سرویس BackOffice
|
||
3. ✅ فیکس `TODO` JWT generation در AcceptContractCommandHandler
|
||
4. ✅ تغییر GwUrl FrontOffice Staging → `cms.se.kbs1.ir`
|
||
5. ✅ مپ `/hubs/token-relay` → آلیاس در CMS (backward compatibility)
|
||
6. ✅ Kavenegar — قبلاً در CMS بود
|
||
7. ✅ Security Logic (ICurrentUserService) — قبلاً در CMS بود
|
||
8. ✅ VerifyOtp/AcceptContract composite — قبلاً در CMS بود + JWT فیکس شد
|
||
9. ✅ PYMS — فرانت مستقیم CMS protos استفاده میکنه
|
||
|
||
### ❌ نیاز نیست:
|
||
1. AfrinoIDP — BackOffice خودش OIDC flow مستقیم داره
|
||
|
||
### 📋 تستهای لازم قبل از حذف نهایی BFF:
|
||
1. BackOffice Staging → اتصال مستقیم به CMS + تست Permission Interceptor
|
||
2. FrontOffice Staging → اتصال به `cms.se.kbs1.ir` + تست SignalR + تست OTP/AcceptContract
|