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

Açıklama

ABAC politikaları

modules/auth/policies içindeki öznitelik tabanlı politikaların bir izin kodunu kullanıcı, kaynak ve ortam öznitelikleri üzerindeki kurallarla nasıl daralttığı.

Öznitelik tabanlı erişim denetimi politikası (AuthAbacPolicy, "ABAC politikası") tek bir izin koduna koşullar ekler. Kodu taşıyan bir kullanıcı o kodun her etkin politikasını da sağlamalıdır. Politikalar bir yöneticinin auth ayarlarında düzenlediği kayıtlardır; değerlendirici modules/auth/guards.py içinde, kayıtlar modules/auth/policies/ içindedir. Rollerin ve izin kodlarının kendisi roller ve izinler sayfasında açıklanır.

Kısaca

  • Bir politika tek bir permission_code koduna aittir ve {"logic": "all" veya "any", "rules": [...]} biçiminde bir condition saklar (src/cluster_erp/modules/auth/policies/models.py:12-55, src/cluster_erp/modules/auth/policies/schemas.py:76-90).
  • Bir kuralın bir subject öznitelik yolu, bir operator ve sabit değer ya da başka bir öznitelik yolu olan bir target değeri vardır (src/cluster_erp/modules/auth/guards.py:325-334).
  • On işleç vardır: eq, neq, in, not_in, gt, gte, lt, lte, contains, between (src/cluster_erp/modules/auth/policies/schemas.py:11-13, src/cluster_erp/modules/auth/guards.py:394-438).
  • Bir kodun tüm etkin politikaları geçmelidir; her politika kendi kurallarını kendi logic değerine göre birleştirir (src/cluster_erp/modules/auth/guards.py:259-281, src/cluster_erp/modules/auth/guards.py:306-322).
  • Politikası olmayan bir koda izin verilir; abac_strict_permission_codes ayarında listelenmişse verilmez (src/cluster_erp/modules/auth/guards.py:215-236, src/cluster_erp/config/settings.py:339).

Nasıl çalışır

Öznitelikler

_resolve_attribute bir yolu ilk noktadan bir kapsam ve bir alana böler (src/cluster_erp/modules/auth/guards.py:337-369):

Kapsam Alanlar Kaynak
user Yalnızca izin listesindeki id, username, email, first_name, last_name, employee_id, party_id, is_active, department, clearance, title, location adları; başka her ad boş çözülür src/cluster_erp/modules/auth/guards.py:41-61, src/cluster_erp/modules/auth/guards.py:351-356
resource Çağıranın yüklenmiş bir varlık için verdiği öznitelik sözlüğünün herhangi bir anahtarı src/cluster_erp/modules/auth/guards.py:357-358
env current_time (HH:MM:SS, UTC) ve current_date (YYYY-MM-DD, UTC) src/cluster_erp/modules/auth/guards.py:359-367

department, clearance, title ve location adları AuthUser sütunu değildir; yorum bunları insan kaynaklarından gelecek özne öznitelikleri için ileriye dönük yuvalar olarak adlandırır ve bugün boş çözülürler (src/cluster_erp/modules/auth/guards.py:41-45, src/cluster_erp/modules/auth/users/models.py:17-91).

İşleçler

İşleç Anlam Eksik veya hatalı girdi Kaynak
eq, neq Dizge eşitliği veya eşitsizliği Yanlış src/cluster_erp/modules/auth/guards.py:395-402
in, not_in Liste hedefte üyelik Hedef liste değilse yanlış src/cluster_erp/modules/auth/guards.py:403-412
gt, gte, lt, lte Önce sayı, sonra ISO saat, sonra ISO tarih sıralaması Çift karşılaştırılamıyorsa yanlış src/cluster_erp/modules/auth/guards.py:372-391, src/cluster_erp/modules/auth/guards.py:413-424
contains Dizge öznenin alt dizgesi Dizge değilse yanlış src/cluster_erp/modules/auth/guards.py:425-428
between İki öğeli liste olarak verilen kapalı aralık Aksi hâlde yanlış src/cluster_erp/modules/auth/guards.py:429-436
başka her değer yok Yanlış src/cluster_erp/modules/auth/guards.py:438

Politikaların değerlendirildiği yerler

Akış şeması iki değerlendirme noktasını gösterir.

flowchart TD
 guard["require_permission"] --> route_eval["check_abac, resource None"]
 route_eval --> skip["resource.* kuralları atlanır"]
 skip --> userenv["user.* ve env.* kuralları karara bağlanır"]
 userenv --> handler["uç işleyicisi varlığı yükler"]
 handler --> wired{"kod RESOURCE_ENFORCED_CODES içinde mi?"}
 wired -->|evet| post["varlık öznitelikleriyle enforce_abac"]
 wired -->|hayır| done["ikinci değerlendirme yok"]
 post --> done

Düz anlatımla:

  1. Uç bekçisi check_abac fonksiyonunu resource=None ile çağırır. Bir resource.* özniteliği adlandıran kurallar bu noktada dışarıda kalır; user.* ve env.* kuralları karara bağlanır (src/cluster_erp/modules/auth/guards.py:225-236, src/cluster_erp/modules/auth/guards.py:306-322).
  2. Varlığı yükledikten sonra bir servis varlığın öznitelikleriyle enforce_abac çağırır; böylece resource.* kuralları da karara bağlanır (src/cluster_erp/modules/auth/guards.py:284-303).
  3. Yalnızca RESOURCE_ENFORCED_CODES içindeki kodlar bu ikinci adıma bağlıdır. Bu commit'te küme tek bir kod tutar: intranet_official_delivery.read; çağıranı src/cluster_erp/modules/intranet/delivery/routes.py:38 olur (src/cluster_erp/modules/auth/guards.py:29-39).
  4. PolicyService başka her kod için resource.* kuralı saklamayı yaratmada ve güncellemede ABAC_RESOURCE_RULES_UNSUPPORTED koduyla HTTP 422 vererek reddeder (src/cluster_erp/modules/auth/policies/services.py:64-88, src/cluster_erp/modules/auth/policies/services.py:90-131).

Politika saklama

Politika formu bir mantık seçicisini ve kural satırları listesini düzenler. _assemble_condition bunları condition içine katlar, _clean_rules eksik satırları atar: öznesi olmayan, işleci bilinmeyen, hedefi boş olan veya hedefi boş olmayan bir listeye dönüşemeyen liste işleçli satırlar (src/cluster_erp/modules/auth/policies/schemas.py:44-90). in, not_in veya between için düz bir dizge hedef, bir JSON dizisinden veya virgülle ayrılmış değerlerden listeye çevrilir (src/cluster_erp/modules/auth/policies/schemas.py:20-41). Bir güncelleme form alanlarını saklı koşulla birleştirir; böylece kısmi bir güncelleme diğer yarıyı silmez (src/cluster_erp/modules/auth/policies/services.py:97-131).

PolicyCreate üzerinden kurulmuş örnek istek gövdesi (src/cluster_erp/modules/auth/policies/schemas.py:93-104):

{
 "code": "<policy_code>",
 "permission_code": "<resource>.<action>",
 "name": "<policy name>",
 "condition_logic": "all",
 "condition_rules": [
 {"subject": "env.current_time", "operator": "between", "target": ["09:00", "18:00"]}
 ],
 "is_active": true
}

Uçlar

Uç İzin Kaynak
GET /api/v1/auth/policies/ abac_policy.read src/cluster_erp/modules/auth/policies/routes.py:18-27
POST /api/v1/auth/policies/ abac_policy.create src/cluster_erp/modules/auth/policies/routes.py:30-38
GET /api/v1/auth/policies/{policy_id} abac_policy.read src/cluster_erp/modules/auth/policies/routes.py:41-51
PUT /api/v1/auth/policies/{policy_id} abac_policy.update src/cluster_erp/modules/auth/policies/routes.py:54-65
DELETE /api/v1/auth/policies/{policy_id} abac_policy.delete src/cluster_erp/modules/auth/policies/routes.py:68-76
POST /api/v1/auth/policies/bulk-delete abac_policy.delete src/cluster_erp/modules/auth/policies/routes.py:79-87

Silme deleted_at basar (src/cluster_erp/modules/auth/policies/services.py:133-139). Web ekranı auth ayar sekmelerindeki ABAC Politikası varlığıdır (abac_policy) (src/cluster_erp/modules/auth/module.py:266-275, src/cluster_erp/modules/auth/policies/metadata.py:35).

Neden böyle kurulmuştur

  • Kaynak kuralları uç bekçisinde atlanır, çünkü orada yüklü varlık yoktur; boş bir sözlüğe karşı değerlendirilseler tüm ucu reddederlerdi (src/cluster_erp/modules/auth/guards.py:254-257).
  • Bağlı olmayan kodlar için kaynak kuralı reddedilir, çünkü politika hiçbir şey uygulamadan yapılandırılmış gibi görünürdü (src/cluster_erp/modules/auth/guards.py:29-34, src/cluster_erp/modules/auth/policies/services.py:68-71).
  • Kullanıcı özniteliği izin listesi koşul dilini parola özeti gibi hassas sütunlardan uzak tutar (src/cluster_erp/modules/auth/guards.py:41-45).
  • Eksik kural satırları atılır, çünkü boş bir kural all altında sessizce reddeder veya not_in altında izin verirdi (src/cluster_erp/modules/auth/policies/schemas.py:45-50).

Kurallar ve sınırlar

  • Politikalar izin kodlarıyla birlikte veritabanı başına önbelleğe alınır ve her politika yazımında düşürülür; bkz. kimlik doğrulama ve oturumlar sayfasındaki İzin belleği bölümü (src/cluster_erp/modules/auth/auth_cache.py:113-135).
  • Bellek ORM satırı değil, bağımsız bir PolicyRule anlık görüntüsü tutar (src/cluster_erp/modules/auth/auth_cache.py:28-38).
  • Değerlendiriciyi sabitleyen testler: tests/test_abac_evaluator.py (17 test), tests/test_abac_enforcement.py (9), tests/test_abac_policy_condition.py (5); grep -c "def test_" ile sayıldı. Uçtan uca süit web-client/_e2e_abac_policy_crud.mjs dosyasıdır.

Diğer parçalarla etkileşim

Sınırlar ve açık noktalar

  • Ortam öznitelikleri yalnızca UTC'dir; kiracı veya kullanıcı başına saat dilimi koddan belirlenemedi (src/cluster_erp/modules/auth/guards.py:362-366).
  • department, clearance, title ve location değerlerinin kaynağı koddan belirlenemedi; bunlar AuthUser sütunu değildir.

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
ABAC policy AuthAbacPolicy Bir izin kodunu taşıyanın ayrıca sağlaması gereken kural koşullarının kaydı. ABAC politikası src/cluster_erp/modules/auth/policies/models.py:12
policy rule _evaluate_rule Bir politika koşulundaki tek bir özne, işleç ve hedef karşılaştırması. politika kuralı src/cluster_erp/modules/auth/guards.py:325
strict permission code abac_strict_permission_codes Politikası yoksa reddedilen kod. katı izin kodu src/cluster_erp/config/settings.py:339
resource-enforced code RESOURCE_ENFORCED_CODES Servisinin varlığı yükledikten sonra kaynak kurallarını değerlendirdiği kod. kaynakta uygulanan kod src/cluster_erp/modules/auth/guards.py:35

İlgili sayfalar


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

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