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.
createdanwritemenolak field di luar daftarEDITABLE. Status, versi, dan jejak persetujuan hanya berubah lewat aksi alur kerja — konteksdefault_*dari RPC tidak bisa menembusnya. - Anggota hanya mengusulkan untuk dirinya. Non-CEO tidak bisa menetapkan
owner_idorang lain atau mengisicontributor_ids. - Target terbit terkunci.
writemenolak perubahan pada KPI berstatus terbit, kecualiobjective_idoleh CEO. - Kunci baris saat transisi.
_lock_series()memakaiSELECT ... FOR UPDATEagar dua penerbitan bersamaan tidak menghasilkan dua versi aktif. - Immutable models.
strategy.auditdanstrategy.measure.snapshotmenolakwritedanunlink, 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_dashboardmemvalidasiowner_id,perspective,status,group, dan panjang teks pencarian.
Yang harus diperiksa saat menambah fitur¶
- Apakah field baru perlu masuk
EDITABLE? Kalau ya, apakahaction_revisemenyalinnya benar (Many2one → id)? - Apakah model baru punya baris ACL dan record rule company + peran?
- Apakah parameter baru pada method RPC divalidasi?
- Apakah pesan galat menyebut alasan, bukan sekadar menolak?