Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Kimlik ve erişim

Açıklama

Onaylar ve onay zincirleri

modules/auth içindeki onay zincirlerinin sıralı rol adımlarını nasıl tanımladığı, diğer modüllerin kayıtları onaya nasıl gönderdiği ve onaylayanların nasıl karar verdiği, ertelediği veya iptal ettiği.

Bir onay zinciri (AuthApprovalChain), bir kaynak ve eylem için sıralı bir adım listesidir; her adım ona karar vermesi gereken rolü adlandırır. Bir kaydını onaylatmak isteyen iş modülü, EventBus üzerinden auth modülünden eyleminin zincirini ister ve bir onay talebi (AuthApprovalRequest) gönderir. Onaylayanlar bekleyen işlerini Onaylarım (webapp/i18n/tr.json anahtarı approvals.inbox_title) altında görür ve onaylar, reddeder veya ertelerler. Bu sayfa modules/auth/approval_chains/ ve modules/auth/approvals/ klasörlerini açıklar. Her iş modülünün kendi onay durumları kendi modül sayfasında belgelenir.

Kısaca

  • Bir zincir resource ve action ile tanımlanır; yalnızca etkin ve canlı bir zincir bulunur (src/cluster_erp/modules/auth/approval_chains/models.py:13-61, src/cluster_erp/modules/auth/approval_chains/services.py:61-77).
  • Bir adımın step_order, role_code, is_required, condition ve timeout_hours alanları vardır; step_order canlı satırlar arasında zincir başına benzersizdir (src/cluster_erp/modules/auth/approval_chains/models.py:64-106).
  • Bir talebin dört durumu vardır: pending, approved, rejected ve cancelled (src/cluster_erp/modules/auth/approvals/services.py:279, src/cluster_erp/modules/auth/approvals/services.py:379-400, src/cluster_erp/modules/auth/approvals/services.py:533).
  • Karar veren geçerli adımın rolünü taşımalı, talep eden olmamalı ve aynı talebin önceki bir adımına karar vermemiş olmalıdır; sistem yöneticisi rolü yalnızca adım rolünü aşar (src/cluster_erp/modules/auth/approvals/services.py:311-368).
  • Son karar EventBus üzerinde ApprovalCompleted yayar (src/cluster_erp/modules/auth/approvals/routes.py:116-127).

Nasıl çalışır

Talep durumları

Durum şeması bir onay talebinin yaşamını gösterir.

stateDiagram-v2
 [*] --> pending: create_request
 pending --> pending: approved, sonraki adım var
 pending --> approved: approved, sonraki adım yok
 pending --> rejected: rejected
 pending --> cancelled: talep eden veya yönetici iptal eder
 approved --> [*]
 rejected --> [*]
 cancelled --> [*]

Düz anlatımla:

  1. create_request zincir satırını kilitler; zincirin canlı ve etkin olmasını ve en az bir canlı adımı olmasını ister ve talebi en düşük canlı step_order değerinden pending durumuyla başlatır (src/cluster_erp/modules/auth/approvals/services.py:229-285).
  2. decide talep satırını kilitler ve pending olmayan her şeyi reddeder (src/cluster_erp/modules/auth/approvals/services.py:287-309).
  3. Üç görevler ayrılığı denetimi uygular: talep eden karar veremez, bu talebin bir adımına zaten karar vermiş kullanıcı tekrar karar veremez ve karar veren, admin veya system_admin taşımıyorsa geçerli adımın role_code rolünü taşımalıdır (src/cluster_erp/modules/auth/approvals/services.py:311-368).
  4. Bir AuthApprovalDecision kaydeder. Ret talebi bitirir. Onay current_step değerini sonraki canlı adıma taşır; sonraki adım yoksa talebi approved olarak bitirir (src/cluster_erp/modules/auth/approvals/services.py:370-405).
  5. cancel durumu cancelled yapar; yalnızca talep eden veya bir sistem yöneticisi iptal edebilir (src/cluster_erp/modules/auth/approvals/services.py:514-537).

Karar gövdesi yalnızca approved veya rejected kabul eder (src/cluster_erp/modules/auth/approvals/schemas.py:16).

Erteleme

defer gelecekteki bir tarihe kadar kişisel bir erteleme (AuthApprovalSnooze) kaydeder. Talebi değiştirmez, adım ilerletmez ve işi diğer onaylayanlardan gizlemez. Karar vermeyle aynı uygunluk geçerlidir ve yeni bir erteleme çağıranın öncekinin yerini alır (src/cluster_erp/modules/auth/approvals/models.py:115-156, src/cluster_erp/modules/auth/approvals/services.py:407-489). lift_defer çağıranın kendi ertelemesini bitirir (src/cluster_erp/modules/auth/approvals/services.py:491-512). Web uygulamasında bu aksiyonlar Ertele ve Şimdi geri getir olarak görünür (webapp/i18n/tr.json anahtarları approvals.defer, approvals.defer_lift).

Gelen kutusu

GET /api/v1/auth/approvals/inbox çağıranın işlem yapabileceği bekleyen talepleri döndürür. Uygunluk (adım rolünü taşımak veya sistem yöneticisi olmak) SQL içinde süzülür ve liste 200 öğeyle sınırlıdır; X-Inbox-Truncated: true başlığı daha fazlasının olduğunu söyler (src/cluster_erp/modules/auth/approvals/routes.py:35-53, src/cluster_erp/modules/auth/approvals/services.py:48-215). Her öğe çağıranın karar verip veremeyeceğini (kendi talebinde asla), adım rolünü taşıyıp taşımadığını ve etkin erteleme tarihini belirtir (src/cluster_erp/modules/auth/approvals/services.py:184-213).

Zinciri düzenleme

Zincirin bekleyen bir talebi varken adım değişiklikleri HTTP 409 ile reddedilir. Bekçi, create_request ile aynı zincir satırı kilidini alır; böylece bir gönderim ve bir adım düzenlemesi iç içe geçemez (src/cluster_erp/modules/auth/approval_chains/services.py:102-137, src/cluster_erp/modules/auth/approvals/services.py:236-251).

Uçlar

Uç İzin Kaynak
GET, POST /api/v1/auth/approval-chains/ approval_chain.read, approval_chain.create src/cluster_erp/modules/auth/approval_chains/routes.py:32-52
GET, PUT, DELETE /api/v1/auth/approval-chains/{chain_id} approval_chain.read, approval_chain.update, approval_chain.delete src/cluster_erp/modules/auth/approval_chains/routes.py:55-90
GET, POST /api/v1/auth/approval-chains/{chain_id}/steps approval_chain.read, approval_chain.update src/cluster_erp/modules/auth/approval_chains/routes.py:110-132
GET, PUT, DELETE /api/v1/auth/approval-steps/{step_id} approval_chain.read, approval_chain.update src/cluster_erp/modules/auth/approval_chains/routes.py:135-170
GET /api/v1/auth/approvals/pending permission.read src/cluster_erp/modules/auth/approvals/routes.py:25-32
GET /api/v1/auth/approvals/inbox yalnızca kimlik doğrulama src/cluster_erp/modules/auth/approvals/routes.py:35-53
POST /api/v1/auth/approvals/ permission.assign src/cluster_erp/modules/auth/approvals/routes.py:56-74
POST /api/v1/auth/approvals/{request_id}/decide yalnızca kimlik doğrulama; yetki serviste denetlenir src/cluster_erp/modules/auth/approvals/routes.py:90-131
POST, DELETE /api/v1/auth/approvals/{request_id}/defer yalnızca kimlik doğrulama; yetki serviste denetlenir src/cluster_erp/modules/auth/approvals/routes.py:134-168
POST /api/v1/auth/approvals/{request_id}/cancel yalnızca kimlik doğrulama; talep eden veya yönetici src/cluster_erp/modules/auth/approvals/routes.py:171-186
GET /api/v1/auth/approvals/entity/{entity_type}/{entity_id} permission.read src/cluster_erp/modules/auth/approvals/routes.py:189-198

Neden böyle kurulmuştur

  • Projenin yazılı mühendislik kuralları modüller arası iletişimin EventBus üzerinden olmasını ister; auth modülü bunu tek açık kapısı modules/auth/guards.py ile uygular (src/cluster_erp/modules/auth/guards.py:22-27) ve diğer modüller onaylara yalnızca aşağıdaki sözleşmelerle ulaşır.
  • Karar ucu yönetimsel bir izin taşımaz, çünkü karar yetkisi serviste denetlenen adım rolüdür (src/cluster_erp/modules/auth/approvals/routes.py:98-101).
  • Talep satırı kilidi vardır, çünkü iki onaylayan veya bir çift tıklama aynı adımı iki kez ilerletmemelidir (src/cluster_erp/modules/auth/approvals/services.py:294-297).
  • Bir adımın is_required ve condition alanları decide içinde değerlendirilmez; yorum bunları atlamanın yalnızca daha fazla onay gerektirdiğini söyler (src/cluster_erp/modules/auth/approvals/services.py:355-356).
  • Erteleme karar değil, gelen kutusu durumudur; bu yüzden karar denetim izi yalnızca gerçek sonuçları kaydeder (src/cluster_erp/modules/auth/approvals/models.py:115-122).

Kurallar ve sınırlar

  • Talep eden kendi talebine asla karar vermez ve onu ertelemez (src/cluster_erp/modules/auth/approvals/services.py:313-318, src/cluster_erp/modules/auth/approvals/services.py:418-423).
  • Bir talep yaratılmadan önce zincirin en az bir canlı adımı olmalıdır (src/cluster_erp/modules/auth/approvals/services.py:258-273).
  • Talepler, kararlar ve ertelemeler diğer her kayıt gibi yumuşak silinen satırlardır (src/cluster_erp/modules/auth/approvals/services.py:479-482).

Diğer parçalarla etkileşim

Yön Sözleşme İşleyici veya çağıran Kaynak
auth sorguyu yanıtlar GetApprovalChainForAction Module._handle_get_approval_chain src/cluster_erp/modules/auth/module.py:83-86, src/cluster_erp/modules/auth/module.py:146-164
auth sorguyu yanıtlar SubmitForApproval Module._handle_submit_for_approval src/cluster_erp/modules/auth/module.py:87, src/cluster_erp/modules/auth/module.py:166-188
auth sorguyu yanıtlar GetApprovalRequestById Module._handle_get_approval_request src/cluster_erp/modules/auth/module.py:88-91, src/cluster_erp/modules/auth/module.py:190-211
auth yayar ApprovalCompleted decide_approval src/cluster_erp/modules/auth/approvals/routes.py:116-127
documents sorar ve gönderir GetApprovalChainForAction, SubmitForApproval belge sürümü gönderme ucu src/cluster_erp/modules/documents/documents/routes.py:326-350
documents abone olur ApprovalCompleted handle_approval_completed src/cluster_erp/modules/documents/module.py:74-77
intranet izin sorar ve gönderir GetApprovalChainForAction, SubmitForApproval _route_approval src/cluster_erp/modules/intranet/leave/services.py:740-770
intranet talepleri sorar ve gönderir GetApprovalChainForAction, SubmitForApproval talepler servisi src/cluster_erp/modules/intranet/requests/services.py:292-305

Sözleşme sınıfları src/cluster_erp/core/contracts.py:275-309 içindedir. Bkz. sözleşmeler başvurusu.

Sınırlar ve açık noktalar

  • timeout_hours bir adımda saklanır ama hiçbir kod onu okumaz; onay zinciri model, şema ve metadata dosyaları dışında timeout_hours için grep hiçbir şey bulmaz.
  • is_required ve condition saklanır ama değerlendirilmez (src/cluster_erp/modules/auth/approvals/services.py:355-356).
  • AuthApprovalSnooze, toplayıcı modules/auth/models.py tarafından dışa aktarılmaz; onay servisi modülü içe aktarıldığında kaydolur (src/cluster_erp/modules/auth/models.py:1-42, src/cluster_erp/modules/auth/approvals/services.py:22-26).

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
approval chain AuthApprovalChain Bir kaynak ve eylem için sıralı rol adımları listesi. Onay Zinciri src/cluster_erp/modules/auth/approval_chains/models.py:13
approval step AuthApprovalStep Zincirde, rolünü taşıyanların karar verdiği tek bir konum. onay adımı src/cluster_erp/modules/auth/approval_chains/models.py:64
approval request AuthApprovalRequest Bir zincire gönderilen, geçerli adımı ve durumu olan tek bir kayıt. onay talebi src/cluster_erp/modules/auth/approvals/models.py:26
approval snooze AuthApprovalSnooze Bekleyen bir işi bir onaylayandan bir tarihe kadar gizleyen kişisel erteleme işareti. erteleme src/cluster_erp/modules/auth/approvals/models.py:115
segregation of duties AUTH_SELF_APPROVAL_FORBIDDEN Talep edenin veya önceki bir karar verenin bir adıma karar veremeyeceği kuralı. görevler ayrılığı src/cluster_erp/modules/auth/approvals/services.py:311

İlgili sayfalar


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

Doğrulanan commit 92f8051 · 2026-11-13