`AudienceOwnershipPort` — `employee` va `driver` (09_auth R53)
Tavsif
Qabul mezonlari (DoD)
6 / 6 bajarildi
-
Faol hodimga bog'langan user *Hodim* roli (`audience='employee'`) bilan login qila oladi
qa-ep-06-t03-s05 · 1 о аввал
-
`suspended`/`fired` hodimning useri `403 audience_mismatch` oladi
qa-ep-06-t03-s05 · 1 о аввал
-
Hodimga bog'lanmagan internal user *Hodim* roli bilan login qila olmaydi
qa-ep-06-t03-s05 · 1 о аввал
-
`is_driver=true` faol kasbi yo'q hodim *Haydovchi* roli bilan `403 audience_mismatch`; kasb belgilangach login o'tadi; kasb `active=false` qilingach KEYINGI login yana 403 (09_auth AC49c)
qa-ep-06-t03-s05 · 1 о аввал
-
`web` va `supplier` audience xatti-harakati o'zgarmagan (EP-03 regressiya testlari yashil)
qa-ep-06-t03-s05 · 1 о аввал
-
Rad etish `auth_logs` ga yoziladi (login oqimining mavjud audit yo'li orqali)
qa-ep-06-t03-s05 · 1 о аввал
O'zgargan fayllar
6 ta
-
modified
src/test/java/uz/erpbom/auth/service/LoginServiceIntegrationTest.java -
modified
src/main/java/uz/erpbom/suppliers/service/SupplierAudienceOwnershipAdapter.java -
modified
src/main/java/uz/erpbom/employees/service/EmployeeAudienceOwnershipService.java -
modified
src/main/java/uz/erpbom/employees/repository/EmployeeRepository.java -
modified
src/main/java/uz/erpbom/employees/repository/EmployeeProfessionRepository.java -
modified
src/main/java/uz/erpbom/auth/service/AudienceOwnershipPort.java
Izoh qoldirish
Tarix
23 yozuv
-
✎
finalize-ep-06 yangiladi
Yangilandi: pr_url
-
💬
qa-ep-06-t03-s05 izoh qoldirdi
QA (qa-EP-06-T03-S05) — MUSTAQIL tekshiruv, 6/6 mezon tasdiqlandi. TIKLANMAGAN MUTATSIYA IZI: YO'Q. EmployeeAudienceOwnershipService.java butun fayl bo'ylab tekshirildi — `git diff HEAD` bo'sh; STATUS_ACTIVE konstantasi ISHLATILGAN (73-74 q.); javadoc (R53) va kod mos; ishlatilmaydigan konstanta / tushib qolgan shart yo'q. Bytecode tasdig'i (javap -c): lambda$activeEmployeeByUserId$1 -> ldc "active" + Employee.getStatus() + String.equals. `deleted_at IS NULL` — findByUserIdAndDeletedAtIsNull orqali joyida. MUTATSIYA SINOVI (har biri: .bak nusxadan tiklash, .class o'chirish, qayta kompilyatsiya, javap bytecode tasdig'i, flock ostida test): 1. .filter(STATUS_ACTIVE.equals(getStatus())) -> har doim true | javap: getStatus() chaqiruvi YO'Q | YIQILDI: suspendedEmployeeUserGetsAudienceMismatchAndAuthLogRecorded + firedEmployeeUserGetsAudienceMismatch (IKKALASI — AC2865) 2. JPQL `p.isDriver = true` olib tashlandi | javap: annotatsiya satri tasdiqlandi | YIQILDI: driverAudienceGatedByActiveIsDriverProfessionThreeStages (1-bosqich) 3. JPQL `p.active = true` olib tashlandi | YIQILDI: driverAudienceRequiresProfessionItselfActiveNotJustTheAssignment 4. JPQL `ep.active = true` olib tashlandi | YIQILDI: driverAudienceGatedByActiveIsDriverProfessionThreeStages (3-bosqich) Hamma mutatsiya O'LDIRILDI (survived yo'q). Fayllar tiklandi: md5 941c3e71.../701ac16a... mos, `git status` boshlang'ich holatga teng, bytecode ham tiklangani javap bilan tasdiqlandi. TEST (flock ostida, `mvn clean` ISHLATILMADI): mvn -Dtest=LoginServiceIntegrationTest test Tests run: 20, Failures: 0, Errors: 0, Skipped: 0 — 43.933s (surefire XML) MEZONLAR: - 2864 activeEmployeeLinkedUserLogsInSuccessfullyWithEmployeeAudience — 200 + access_token. - 2865 suspended VA fired ALOHIDA ikki test; ikkalasi ham countActiveSessions=0 va failedLoginCount=0 ni tekshiradi. Mutatsiya #1 ikkalasini ham o'ldirdi. - 2866 ownershipConditionNotMetReturnsAudienceMismatchWithoutSessionOrCounterChange — `employees` qatorisiz internal user -> 403 AUDIENCE_MISMATCH, sessiya yo'q, hisoblagich o'zgarmagan. - 2867 UCHALA bosqich ALOHIDA assert: (1) faol lekin is_driver=false kasb (Payvandchi) -> 403; (2) is_driver=true faol kasb biriktirilgach -> 200; (3) employee_professions.active=false -> keyingi login 403. IKKALA yo'l qoplangan: employee_professions.active (3-bosqich) va professions.active (alohida test driverAudienceRequiresProfessionItselfActiveNotJustTheAssignment) — mutatsiya #3 va #4 buni mustaqil isbotladi. - 2868 Yangi "har doim true" testi YO'Q. `git show 2cb0faf` test faylida FAQAT 3 qator IZOH o'chirilgan; mavjud EP-03 regressiya testlari (partnerLinkedToActiveSupplier / partnerLinkedToInactiveSupplier / partnerWithNoLinkedSupplier / partnerUserRequestingWebAudienceGetsMasked / customerUserRequestingWebAudienceIsAlsoMasked / successfulWebLoginCreatesSessionWithAudienceAndSelfReferencingFamily) TEGILMAGAN va shu yurgizishda yashil. `customer` — adapterda `case` yo'q, `default -> false` (hamon false). - 2869 HAQIQIY qator MAZMUNI bilan: auth_logs SELECT -> result=deny, error_code=403, user_id mos, details ichida `audience_mismatch` + `employee`, va "faqat bitta deny qatori" asserti. KONTRAKT/SPEC (09_auth.md#R53, faqat o'qildi): - Javob tanasi code=AUDIENCE_MISMATCH (UPPER_SNAKE), auth_logs details.reason=audience_mismatch (lower_snake) — R53 konvensiyasiga mos. - LoginService imzosi O'ZGARMAGAN: 2cb0faf LoginService.java ga umuman tegmagan (diff stat 6 fayl). - Kasb NOMI bo'yicha tekshiruv YO'Q — JPQL faqat p.isDriver; testlar kasb nomini UUID bilan tasodifiy qo'yadi. - openapi/ va docs/ ga yozilmagan. CROSS-CUTTING: ikkala servis metodi @Transactional(readOnly = true); tenant_id/schema yo'q (AR-1); fizik DELETE yo'q, soft-delete hisobga olingan; logDeny faqat reason+audience yozadi — parol/token log'ga tushmaydi. NON-BLOCKING kuzatuv (mezon emas): soft o'chirilgan hodim (deleted_at IS NOT NULL) uchun alohida login testi yo'q — shart kodda bor, lekin mutatsiya bilan qoplanmagan.
-
⇄
qa-ep-06-t03-s05 statusni o'zgartirdi Review → Bajarildi
-
✓
qa-ep-06-t03-s05 qabul mezonini belgiladi
✓ Rad etish `auth_logs` ga yoziladi (login oqimining mavjud audit yo'li orqali)
-
✓
qa-ep-06-t03-s05 qabul mezonini belgiladi
✓ `web` va `supplier` audience xatti-harakati o'zgarmagan (EP-03 regressiya testlari yashil)
-
✓
qa-ep-06-t03-s05 qabul mezonini belgiladi
✓ `is_driver=true` faol kasbi yo'q hodim *Haydovchi* roli bilan `403 audience_mismatch`; kasb belgilangach login o'tadi; kasb `active=false` qilingach KEYINGI login yana 403 (09_auth AC49c)
-
✓
qa-ep-06-t03-s05 qabul mezonini belgiladi
✓ Hodimga bog'lanmagan internal user *Hodim* roli bilan login qila olmaydi
-
✓
qa-ep-06-t03-s05 qabul mezonini belgiladi
✓ `suspended`/`fired` hodimning useri `403 audience_mismatch` oladi
-
✓
qa-ep-06-t03-s05 qabul mezonini belgiladi
✓ Faol hodimga bog'langan user *Hodim* roli (`audience='employee'`) bilan login qila oladi
-
⇄
coder-ep-06-t03-s05 statusni o'zgartirdi Ishlanyapti → Review
-
✎
coder-ep-06-t03-s05 yangiladi
Yangilandi: branch, commit_sha
-
✓
coder-ep-06-t03-s05 qabul mezonini belgiladi
✓ Rad etish `auth_logs` ga yoziladi (login oqimining mavjud audit yo'li orqali)
-
✓
coder-ep-06-t03-s05 qabul mezonini belgiladi
✓ `web` va `supplier` audience xatti-harakati o'zgarmagan (EP-03 regressiya testlari yashil)
-
✓
coder-ep-06-t03-s05 qabul mezonini belgiladi
✓ `is_driver=true` faol kasbi yo'q hodim *Haydovchi* roli bilan `403 audience_mismatch`; kasb belgilangach login o'tadi; kasb `active=false` qilingach KEYINGI login yana 403 (09_auth AC49c)
-
✓
coder-ep-06-t03-s05 qabul mezonini belgiladi
✓ Hodimga bog'lanmagan internal user *Hodim* roli bilan login qila olmaydi
-
✓
coder-ep-06-t03-s05 qabul mezonini belgiladi
✓ `suspended`/`fired` hodimning useri `403 audience_mismatch` oladi
-
✓
coder-ep-06-t03-s05 qabul mezonini belgiladi
✓ Faol hodimga bog'langan user *Hodim* roli (`audience='employee'`) bilan login qila oladi
-
📄
coder-ep-06-t03-s05 fayllarni qayd etdi
6 ta fayl qayd etildi
-
⇄
coder-ep-06-t03-s05 statusni o'zgartirdi Backlog → Ishlanyapti
Agent ishni boshladi
-
⚑
coder-ep-06-t03-s05 ishga oldi
-
🔗
pm-agent bog'liqlik qo'shdi
→ EP-06-T03-S02
-
🔗
pm-agent bog'liqlik qo'shdi
→ EP-06-T03-S01
-
✦
pm-agent yaratdi
`AudienceOwnershipPort` — `employee` va `driver` (09_auth R53)
Ma'lumot
- Agent
- coder-ep-06-t03-s05
- Olingan
- 1 о аввал
- Boshlandi
- 24.08.2026 16:30
- Tugadi
- 24.08.2026 17:45
- Baho
- 4 soat
- Spec
- erp/docs/modules/09_auth.md#R53
- Branch
- feat/EP-06-erpbom-backend
- Commit
- 2cb0faf134d9
Bog'liqliklar
Agent uchun
Bu ishni AI agent quyidagicha oladi:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-06-T03-S05/claim \ -H "X-Agent: backend-dev-1"
Tugatgach:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-06-T03-S05/status \
-H "X-Agent: backend-dev-1" \
-H "Content-Type: application/json" \
-d '{"status":"review","note":"..."}'