src/cluster_erp/modules/auth/ içindeki auth modülü kullanıcıları içeri alır ve ne yapabileceklerine karar verir. Kullanıcıları, rolleri, izin kodlarını, öznitelik politikalarını, onay zincirlerini ve taleplerini, bildirim kurallarını, iptal edilmiş belirteçleri ve her kullanıcının kendi arayüz durumunu yönetir. Ekranlarını yöneticiler kullanır; diğer her modül onu modules/auth/guards.py ve EventBus üzerinden kullanır. Mekanizmalar kimlik ve erişim bölümünün sayfalarında açıklanır; bu sayfa modül özetidir.
Bir bakışta¶
| Öğe | Değer | Kaynak |
|---|---|---|
| Paket | src/cluster_erp/modules/auth/ |
klasör |
| Modül sınıfı | Module |
src/cluster_erp/modules/auth/module.py:15 |
name / version |
auth / 0.1.0 |
src/cluster_erp/modules/auth/module.py:16-22 |
| API öneki | /api/v1/auth (ModuleBase.api_prefix) |
src/cluster_erp/core/module_base.py:37-38 |
| Alt modüller | 10: approval_chains, approvals, login, notification_rules, permissions, policies, roles, token_blacklist, ui_state, users |
klasör listesi |
| Tablolar | 14 (__tablename__ sayısı), artı modelsiz olarak auth05 göçüyle yaratılan auth_login_budget |
paket üzerinde grep, migrations/versions/auth05_login_budget.py:33 |
| Metadata'daki varlıklar | 6: user, role, abac_policy, approval_chain, approval_step, notification_rule |
src/cluster_erp/modules/auth/module.py:281-288 |
| Web uygulamasında yeri | Katalogdaki settings sistem uygulamasının kapsamında |
src/cluster_erp/modules/app_store/catalog.json (settings girdisi) |
| Masaüstünde yeri | Yalnızca genel bileşenler; src/cluster_erp/desktop/modules/ içinde klasör yok |
klasör |
Modül ne yapar¶
- Kullanıcıları içeri alır ve çıkarır; belirteçleri verir, döndürür ve iptal eder; bkz. kimlik doğrulama ve oturumlar.
- İzin kataloğunu, rolleri ve kullanıcı rol atamalarını tutar ve her ucu korur; bkz. roller ve izinler.
- Bir izni daraltan öznitelik politikalarını saklar; bkz. ABAC politikaları.
- Diğer modüller için onay zincirlerini çalıştırır; bkz. onaylar ve onay zincirleri.
- Bildirim kurallarını saklar; bkz. bildirim kuralları.
- Her kullanıcının yerleşimini ve tercihlerini sunucuda saklar (
src/cluster_erp/modules/auth/ui_state/models.py:13-35); bkz. kullanıcı arayüz durumu.
Alt modüller¶
| Alt modül | Amaç | Ana varlıklar | Yönlendirici | Kaynak |
|---|---|---|---|---|
login |
Giriş, yenileme, çıkış, geçerli kullanıcı | yok | /api/v1/auth |
src/cluster_erp/modules/auth/login/routes.py:51 |
users |
Kullanıcı hesapları, parola değiştirme ve sıfırlama | AuthUser, AuthUserRole |
/api/v1/auth/users |
src/cluster_erp/modules/auth/users/routes.py:23 |
roles |
Roller ve izinleri | AuthRole, AuthRolePermission |
/api/v1/auth/roles |
src/cluster_erp/modules/auth/roles/routes.py:20 |
permissions |
İzin kataloğunu okuma | AuthPermission |
/api/v1/auth/permissions |
src/cluster_erp/modules/auth/permissions/routes.py:11 |
policies |
ABAC politikaları | AuthAbacPolicy |
/api/v1/auth/policies |
src/cluster_erp/modules/auth/policies/routes.py:15 |
approval_chains |
Zincirler ve adımlar | AuthApprovalChain, AuthApprovalStep |
/api/v1/auth/approval-chains, /api/v1/auth/approval-steps |
src/cluster_erp/modules/auth/approval_chains/routes.py:20-24 |
approvals |
Talepler, kararlar, erteleme | AuthApprovalRequest, AuthApprovalDecision, AuthApprovalSnooze |
/api/v1/auth/approvals |
src/cluster_erp/modules/auth/approvals/routes.py:22 |
notification_rules |
Bildirim kuralı kayıtları | NotificationRule |
/api/v1/auth/notification-rules |
src/cluster_erp/modules/auth/notification_rules/routes.py:21 |
token_blacklist |
İptal edilmiş belirteç kimlikleri | TokenBlacklist |
yok | src/cluster_erp/modules/auth/token_blacklist/models.py:11 |
ui_state |
Kullanıcı başına arayüz durumu | UserUiState |
/api/v1/auth/ui-state |
src/cluster_erp/modules/auth/ui_state/routes.py:13-39 |
Tüm yönlendiriciler tek bir modül yönlendiricisi altında toplanır (src/cluster_erp/modules/auth/module.py:32-70).
Veri modeli¶
| Varlık | Tablo | Anahtar alanlar | Notlar | Kaynak |
|---|---|---|---|---|
AuthUser |
auth_users |
username, email, password_hash, is_active, failed_login_count, locked_until, last_logout_at, employee_id |
kullanıcı adı ve e-posta canlı satırlar arasında benzersiz | src/cluster_erp/modules/auth/users/models.py:17-91 |
AuthUserRole |
auth_user_roles |
user_id, role_id |
canlı satırlar arasında benzersiz çift | src/cluster_erp/modules/auth/users/models.py:94-123 |
AuthRole |
auth_roles |
code, name, is_system, is_active |
kod canlı satırlar arasında benzersiz | src/cluster_erp/modules/auth/roles/models.py:17-65 |
AuthRolePermission |
auth_role_permissions |
role_id, permission_id |
canlı satırlar arasında benzersiz çift | src/cluster_erp/modules/auth/roles/models.py:68-97 |
AuthPermission |
auth_permissions |
code, resource, action, module |
kod canlı satırlar arasında benzersiz | src/cluster_erp/modules/auth/permissions/models.py:15-55 |
AuthAbacPolicy |
auth_abac_policies |
code, permission_code, condition, is_active |
condition JSONB'dir |
src/cluster_erp/modules/auth/policies/models.py:12-55 |
AuthApprovalChain |
auth_approval_chains |
code, resource, action, is_active |
src/cluster_erp/modules/auth/approval_chains/models.py:13-61 |
|
AuthApprovalStep |
auth_approval_steps |
chain_id, step_order, role_code |
zincir başına benzersiz step_order |
src/cluster_erp/modules/auth/approval_chains/models.py:64-106 |
AuthApprovalRequest |
auth_approval_requests |
chain_id, entity_type, entity_id, current_step, status, requested_by |
src/cluster_erp/modules/auth/approvals/models.py:26-74 |
|
AuthApprovalDecision |
auth_approval_decisions |
request_id, step_id, decided_by, decision |
src/cluster_erp/modules/auth/approvals/models.py:77-112 |
|
AuthApprovalSnooze |
auth_approval_snoozes |
request_id, user_id, until |
talep ve kullanıcı başına tek canlı satır | src/cluster_erp/modules/auth/approvals/models.py:115-156 |
NotificationRule |
platform_notification_rules |
event_type, recipient_type, channel, template_key |
src/cluster_erp/modules/auth/notification_rules/models.py:9-44 |
|
TokenBlacklist |
auth_token_blacklist |
token_jti, expires_at |
token_jti benzersiz |
src/cluster_erp/modules/auth/token_blacklist/models.py:11-23 |
UserUiState |
auth_user_ui_state |
user_id, key, value |
kullanıcı ve anahtar başına tek canlı satır | src/cluster_erp/modules/auth/ui_state/models.py:13-35 |
Her varlık BaseModel sınıfından türer; bu yüzden satırlar yumuşak silinir; bkz. yumuşak silme ve kullanımdan kaldırma.
Ekranlar ve metadata¶
get_metadata, İngilizcede Authorization, Türkçede Yetkilendirme adlı tek bir kenar çubuğu grubu bildirir; üç bölümü vardır: Kullanıcılar (user listesi), Roller (role listesi) ve abac_policy, approval_chain ve notification_rule sekmeli Ayarlar (src/cluster_erp/modules/auth/module.py:236-280). Etiketler dil dosyalarından değil metadata'dan gelir. Onaylayan gelen kutusu Onaylarım (webapp/i18n/tr.json anahtarı approvals.inbox_title) web uygulamasının bir ana ekran bileşenidir; bkz. ana ekran bileşenleri.
Durumlar ve aksiyonlar¶
Auth metadata'sı hiçbir ActionMeta bildirmez; modules/auth içinde ActionMeta( için grep hiçbir şey bulmaz. Onay talepleri durumlarını kendi uçlarıyla değiştirir; bkz. onaylar ve onay zincirleri.
| Aksiyon | Etiket | Koşul | Uç | İzin | Kaynak |
|---|---|---|---|---|---|
| decide | Onayla veya Reddet (approvals.approve, approvals.reject) |
talep pending, çağıran adım rolünü taşır |
POST /api/v1/auth/approvals/{request_id}/decide |
adım rolü, serviste denetlenir | src/cluster_erp/modules/auth/approvals/routes.py:90-131 |
| defer | Ertele (approvals.defer) |
talep pending, çağıran uygun |
POST /api/v1/auth/approvals/{request_id}/defer |
adım rolü, serviste denetlenir | src/cluster_erp/modules/auth/approvals/routes.py:134-154 |
| cancel | metadata'da yok | talep pending, çağıran talep eden veya yönetici |
POST /api/v1/auth/approvals/{request_id}/cancel |
serviste denetlenir | src/cluster_erp/modules/auth/approvals/routes.py:171-186 |
İş kuralları¶
- Bir sistem rolü silinemez (
src/cluster_erp/modules/auth/roles/routes.py:104-105,src/cluster_erp/modules/auth/roles/services.py:72-80). - Rol ve izin vermeleri yetki tavanına uyar (
src/cluster_erp/modules/auth/users/services.py:205-221,src/cluster_erp/modules/auth/roles/services.py:139-163). - Alınmış bir kullanıcı adıyla kullanıcı yaratmak çakışma yanıtı verir (
src/cluster_erp/modules/auth/users/routes.py:104-106). - İlk yönetici yalnızca boş bir veritabanında yaratılır (
src/cluster_erp/modules/auth/users/services.py:412-453). - Değiştirilen bir parola önceki tüm oturumları bitirir (
src/cluster_erp/modules/auth/users/services.py:273-276).
Olaylar ve sorgular¶
| Yön | Sözleşme sınıfı | İşleyici veya yayan | Kaynak |
|---|---|---|---|
| sorguyu yanıtlar | GetUserById |
_handle_get_user |
src/cluster_erp/modules/auth/module.py:81, src/cluster_erp/modules/auth/module.py:110-128 |
| sorguyu yanıtlar | GetUserPermissions |
_handle_get_permissions |
src/cluster_erp/modules/auth/module.py:82, src/cluster_erp/modules/auth/module.py:130-144 |
| sorguyu yanıtlar | GetApprovalChainForAction |
_handle_get_approval_chain |
src/cluster_erp/modules/auth/module.py:83-86 |
| sorguyu yanıtlar | SubmitForApproval |
_handle_submit_for_approval |
src/cluster_erp/modules/auth/module.py:87 |
| sorguyu yanıtlar | GetApprovalRequestById |
_handle_get_approval_request |
src/cluster_erp/modules/auth/module.py:88-91 |
| yayar | ApprovalCompleted |
decide_approval |
src/cluster_erp/modules/auth/approvals/routes.py:116-127 |
| abone olur | CollectSubjectData |
collect_subject_data |
src/cluster_erp/modules/auth/module.py:101-104 |
| abone olur | AnonymiseSubject |
anonymise_subject |
src/cluster_erp/modules/auth/module.py:105-108 |
Yetkiler¶
| İzin anahtarı | Kullanan | Kaynak |
|---|---|---|
user.read, user.create, user.update, user.delete, user.reset_password |
kullanıcı uçları | src/cluster_erp/modules/auth/users/routes.py:59-194 |
role.read, role.create, role.update, role.delete |
rol uçları | src/cluster_erp/modules/auth/roles/routes.py:42-119 |
permission.read, permission.assign |
katalog, izin verme, onay okumaları ve talep yaratma | src/cluster_erp/modules/auth/permissions/routes.py:18, src/cluster_erp/modules/auth/roles/routes.py:122-150, src/cluster_erp/modules/auth/approvals/routes.py:27-80 |
abac_policy.read, abac_policy.create, abac_policy.update, abac_policy.delete |
politika uçları | src/cluster_erp/modules/auth/policies/routes.py:18-87 |
approval_chain.read, approval_chain.create, approval_chain.update, approval_chain.delete |
zincir ve adım uçları | src/cluster_erp/modules/auth/approval_chains/routes.py:32-181 |
notification_rule.read, notification_rule.create, notification_rule.update, notification_rule.delete |
bildirim kuralı uçları | src/cluster_erp/modules/auth/notification_rules/routes.py:24-93 |
user.reset_password bir CRUD kodu değildir; ek tohum listesindedir (src/cluster_erp/server/app.py:675). admin rolü tohumlanan her kodu alır (src/cluster_erp/modules/auth/roles/services.py:213-276).
Gizlilik, saklama ve geçmiş¶
privacy_handlers.py giriş hesabını (kullanıcı adı, e-posta, adlar, etkinlik bayrağı, rol kodları, giriş ve çıkış zamanları, yaratılma zamanı) döndürür; silmede tanımlayıcı sütunların üzerine yazar, hesabı pasifleştirir ve last_logout_at damgasını basar (src/cluster_erp/modules/auth/privacy_handlers.py:1-104). Parola özeti asla dışa aktarılmaz ve değişiklik geçmişinde gizlenir (src/cluster_erp/modules/auth/privacy_handlers.py:7-8). Süresi dolmuş kara liste satırlarını günlük kayıt saklama siler (src/cluster_erp/server/app.py:1168-1192). auth_token_blacklist değişiklik geçmişinin dışında tutulur; bkz. değişiklik geçmişi.
Analitik olguları¶
Bu modülün analytics_facts.py dosyası yoktur.
Ayarlar ve başvuru verileri¶
Modülün kullandığı ayarlar: secret_key, jwt_access_expire_minutes, jwt_refresh_expire_days, jwt_session_hours, jwt_refresh_reuse_grace_seconds, login_rate_limit_per_minute, auth_cache_seconds, abac_strict_permission_codes ve bootstrap_admin_* ayarları (src/cluster_erp/config/settings.py:186-205, src/cluster_erp/config/settings.py:307-339). Bkz. ayarlar başvurusu. İzin kodları her açılışta tohumlanır (src/cluster_erp/server/app.py:634-948). password_min_length ayarı tanımlıdır (src/cluster_erp/config/settings.py:327), ama bu commit'te hiçbir kod onu okumaz (git grep password_min_length).
Testler¶
Dosya adıyla, tests/ içinde modules.auth içe aktarma aramasıyla ve web-client/ içinde adla bulundu.
| Tür | Dosya | Kapsam |
|---|---|---|
| pytest | tests/test_abac_evaluator.py |
işleçler, öznitelikler, koşul mantığı |
| pytest | tests/test_abac_enforcement.py |
check_abac ve enforce_abac |
| pytest | tests/test_abac_policy_condition.py |
politika koşulu kurucusu |
| pytest | tests/test_admin_bootstrap.py |
ilk açılış yönetici bekçisi |
| pytest | tests/test_auth_cache_stamp.py |
işçiler arası bellek geçersizleştirme |
| pytest | tests/test_login_identifier.py |
giriş tanımlayıcısı çözümleme |
| pytest | tests/test_login_budget_live.py |
ortak hata bütçesi (canlı sunucu) |
| pytest | tests/test_authz_conformance.py |
katmanlı yetkilendirme modeli |
| e2e | web-client/_e2e_auth_panels.mjs |
auth ekranları |
| e2e | web-client/_e2e_approvals.mjs, web-client/_e2e_approval_role.mjs, web-client/_e2e_approvals_integrity.mjs, web-client/_e2e_approvals_widget.mjs |
onay akışı ve gelen kutusu |
| e2e | web-client/_e2e_login_rate_limit.mjs, web-client/_e2e_session_remember.mjs |
giriş sınırları ve oturum uzunluğu |
| e2e | web-client/_e2e_ui_states.mjs |
kullanıcı başına arayüz durumu |
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| user | AuthUser |
Bir kiracıdaki bir kişinin giriş hesabı. | Kullanıcı (webapp/i18n/tr.json anahtarı resource.user) |
src/cluster_erp/modules/auth/users/models.py:17 |
| user UI state | UserUiState |
Bir kullanıcının kısa bir adla anahtarlanmış saklı arayüz tercihi. | kullanıcı arayüz durumu | src/cluster_erp/modules/auth/ui_state/models.py:13 |
İlgili sayfalar¶
- Modüller dizini
- Bu modülün API başvurusu
- Kimlik, erişim, kiracılık, gizlilik ve lisans
- Roller ve izinler
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.