Lewati ke isi

Keamanan & Hak Akses

Grup

Grup XML ID Kemampuan
Member group_strategy_member Membaca KPI miliknya & yang ia kontribusikan, mengusulkan KPI, mengirim aktual, check-in
CEO group_strategy_ceo Semua di atas + menetapkan, menerbitkan, merevisi, memverifikasi, membaca semua

CEO mewarisi Member; Member mewarisi base.group_user.

Record rule

Setiap model punya dua lapis: aturan company (global) dan aturan peran.

company : [('company_id', 'in', company_ids)]
member  : ['|', ('owner_id', '=', user.id), ('contributor_ids', 'in', [user.id])]
ceo     : [(1, '=', 1)]

Untuk model turunan (snapshot, observation, audit, checkin) aturan member menembus lewat measure_id.owner_id / measure_id.contributor_ids.

Sasaran adalah pengecualian yang disengaja

strategy.objective hanya memakai aturan company — semua anggota boleh membaca seluruh sasaran perusahaannya. Sasaran adalah pernyataan strategi, bukan rahasia. Apa yang terlihat di bawahnya tetap ditentukan aturan KPI.

Yang dijaga di lapisan kode

Record rule saja tidak cukup; beberapa hal ditegakkan di create/write:

  • Whitelist field. create dan write menolak field di luar daftar EDITABLE. Status, versi, dan jejak persetujuan hanya berubah lewat aksi alur kerja — konteks default_* dari RPC tidak bisa menembusnya.
  • Anggota hanya mengusulkan untuk dirinya. Non-CEO tidak bisa menetapkan owner_id orang lain atau mengisi contributor_ids.
  • Target terbit terkunci. write menolak perubahan pada KPI berstatus terbit, kecuali objective_id oleh CEO.
  • Kunci baris saat transisi. _lock_series() memakai SELECT ... FOR UPDATE agar dua penerbitan bersamaan tidak menghasilkan dua versi aktif.
  • Immutable models. strategy.audit dan strategy.measure.snapshot menolak write dan unlink, dan hanya bisa dibuat oleh alur internal (self.env.su).
  • Input peramban tidak pernah jadi domain. action_attention_records(key) mencocokkan kunci ke daftar segmen dan membangun domainnya di server. get_dashboard memvalidasi owner_id, perspective, status, group, dan panjang teks pencarian.

Yang harus diperiksa saat menambah fitur

  1. Apakah field baru perlu masuk EDITABLE? Kalau ya, apakah action_revise menyalinnya benar (Many2one → id)?
  2. Apakah model baru punya baris ACL dan record rule company + peran?
  3. Apakah parameter baru pada method RPC divalidasi?
  4. Apakah pesan galat menyebut alasan, bukan sekadar menolak?