Perbaikan Modul dengan BC

This commit is contained in:
2026-04-17 13:10:45 +07:00
parent 7869d9571c
commit 868dbc352a
5 changed files with 313 additions and 2 deletions
+85
View File
@@ -0,0 +1,85 @@
# GRT Expense Business Category
## Ringkasan
`grt_expense_business_category` menambahkan segregasi `Business Category` pada Expense dan Expense Report.
Cakupan utama:
- `Expense` per business category
- `Expense Team` per business category
- konsistensi analytic account expense
- pembatasan akses berbasis `effective_business_category_ids`
## Dependensi
- `hr_expense`
- `account`
- `grt_business_category_base`
## Model Utama
### `hr.expense`
Penambahan utama:
- `business_category_id`
- `expense_team_id`
- `expense_analytic_account_id`
Perilaku utama:
- category dapat mengikuti team
- analytic account mengikuti category
- validasi memastikan company/category/team konsisten
### `hr.expense.sheet`
Penambahan utama:
- `business_category_id`
- `expense_team_id`
- `expense_analytic_account_id`
Perilaku utama:
- report menjaga konsistensi category/team dari seluruh expense line
- posting accounting mewariskan `expense_business_category_id` dan analytic account ke journal entry
### `expense.team`
Model team expense per category.
## Security Rule
Model yang dibatasi category:
- `hr.expense`
- `hr.expense.sheet`
- `expense.team`
- `crm.business.category` (scope expense)
- `account.move` (expense business category)
- `account.move.line` (expense business category)
Prinsip akses:
- user expense hanya bisa akses company + category efektif
- manager expense tetap dibatasi category efektif
- admin modul tetap dibatasi category efektif
- hanya super admin (UID 1) yang dapat bypass penuh
## Update Akses Ketat (2026-04-16)
Perubahan hardening yang diterapkan:
- ditambahkan guard domain pada `_search` untuk `hr.expense` dan `hr.expense.sheet`
- ditambahkan `check_access_rule` untuk `hr.expense` dan `hr.expense.sheet` agar lintas category ditolak dengan pesan jelas
- bypass berbasis `base.group_system` di validasi operasional diubah menjadi bypass hanya untuk `SUPERUSER_ID` (UID 1)
Implikasi:
- user tidak bisa membuka data lintas category walau filter list default dihapus
- admin expense tetap perlu didaftarkan ke team/category tujuan
## Langkah Deploy
1. restart service Odoo
2. upgrade modul `grt_expense_business_category`
3. uji user non-super-admin pada Expense dan Expense Report setelah menghapus filter default
4. uji akses record lintas category dan pastikan muncul penolakan akses
+94
View File
@@ -0,0 +1,94 @@
# GRT Inventory Business Category
## Ringkasan
`grt_inventory_business_category` menambahkan segregasi `Business Category` pada area Inventory.
Cakupan utama:
- `Stock Picking` per business category
- `Stock Team` per business category
- `Warehouse` per business category
- propagasi category ke stock move dan valuation accounting
## Dependensi
- `stock_account`
- `sale_stock`
- `purchase_stock`
- `grt_business_category_base`
- `grt_sales_business_category`
- `grt_purchase_business_category`
## Model Utama
### `stock.picking`
Penambahan utama:
- `business_category_id`
- `stock_team_id`
- `inventory_analytic_account_id`
Perilaku utama:
- category bisa mengikuti picking type warehouse atau stock team
- validasi memastikan warehouse/team/category konsisten
- validasi menolak proses bila category kosong saat validasi transfer
### `stock.move`
Penambahan utama:
- `business_category_id`
- `stock_team_id`
- `inventory_analytic_account_id`
Perilaku utama:
- category dipropagasikan dari picking, sale/purchase context, dan manufacturing context
- account move line valuation dapat mewarisi analytic account inventory
### `stock.warehouse`
Penambahan utama:
- `business_category_id`
- `stock_team_id`
## Security Rule
Model yang dibatasi category:
- `stock.picking`
- `stock.move`
- `stock.warehouse`
- `stock.team`
- `stock.quant`
- `product.template`
- `product.product`
- `account.move` (inventory business category)
- `account.move.line` (inventory business category)
Prinsip akses:
- user inventory hanya bisa akses company + category efektif
- manager inventory tetap dibatasi category efektif
- admin modul tetap dibatasi category efektif
- hanya super admin (UID 1) yang dapat bypass penuh
## Update Akses Ketat (2026-04-16)
Perubahan hardening yang diterapkan:
- ditambahkan guard domain `stock.picking._search` agar query selalu dipersempit ke company + category efektif
- ditambahkan `stock.picking.check_access_rule` agar akses lintas category ditolak dengan pesan jelas
- bypass berbasis `base.group_system` di validasi operasional `stock.picking` diubah menjadi bypass hanya untuk `SUPERUSER_ID` (UID 1)
Implikasi:
- menghapus filter list default tidak membuat user bisa melihat transfer lintas category
- admin inventory harus tetap didaftarkan ke team/category terkait
## Langkah Deploy
1. restart service Odoo
2. upgrade modul `grt_inventory_business_category`
3. uji user non-super-admin dengan menghapus filter default pada Transfer list
4. uji akses record lintas category dan pastikan muncul penolakan akses
+26 -1
View File
@@ -147,7 +147,8 @@ Model yang dibatasi oleh business category:
Prinsip rule:
- user MRP hanya bisa akses data pada company yang diizinkan
- user MRP hanya bisa akses data pada `effective_business_category_ids`
- system admin tetap punya akses penuh lintas category dalam company yang diizinkan
- admin modul tetap dibatasi `effective_business_category_ids`
- hanya super admin (UID 1) yang dapat bypass penuh
## Integrasi dengan Modul Lain
@@ -227,3 +228,27 @@ Tujuan:
## Dokumen Terkait
- [MANUFACTURING_BUSINESS_CATEGORY_BLUEPRINT.md](../MANUFACTURING_BUSINESS_CATEGORY_BLUEPRINT.md)
## Update Akses Ketat (2026-04-16)
Dokumentasi ini diperbarui mengikuti hardening akses pada modul MRP.
Perubahan yang diterapkan:
- model `mrp.bom` dan `mrp.production` sekarang menambahkan guard `_search` agar query selalu dipersempit ke category efektif user
- ditambahkan `check_access_rule` pada `mrp.bom` dan `mrp.production` untuk menampilkan peringatan akses yang jelas
- validasi internal yang sebelumnya memberi pengecualian untuk `base.group_system` diubah menjadi pengecualian hanya untuk `SUPERUSER_ID` (UID 1)
- rule `base.group_system` di `security/ir.rule.csv` diperketat dari company-only menjadi company + `effective_business_category_ids`
Dampak operasional:
- admin modul MRP tidak otomatis bisa melihat lintas business category
- jika perlu masuk category lain, user harus didaftarkan ke category/team terkait
- hanya super admin yang tetap punya bypass penuh lintas category
Langkah deploy:
1. restart service Odoo
2. upgrade modul `grt_mrp_business_category`
3. verifikasi list BoM dan MO dengan menghapus filter default: data lintas category harus tetap tidak terlihat
4. verifikasi akses detail record lintas category menghasilkan pesan penolakan akses
+81
View File
@@ -0,0 +1,81 @@
# GRT Purchase Business Category
## Ringkasan
`grt_purchase_business_category` menambahkan segregasi `Business Category` pada proses Purchasing.
Cakupan utama:
- `Purchase Order` per business category
- `Purchase Team` per business category
- propagasi analytic account pembelian
- pembatasan akses berdasarkan `effective_business_category_ids`
## Dependensi
- `purchase`
- `account`
- `grt_business_category_base`
## Model Utama
### `purchase.order`
Penambahan utama:
- `business_category_id`
- `analytic_account_id`
- `purchase_team_id`
- `payment_status`
Perilaku utama:
- category dapat mengikuti `purchase_team_id`
- analytic account mengikuti setting category
- validasi company/category/team dijaga ketat
### `purchase.team`
Model team purchasing per category.
Field utama:
- `name`
- `company_id`
- `business_category_id`
- `user_id`
- `member_ids`
## Security Rule
Model yang dibatasi category:
- `purchase.order`
- `purchase.team`
- `crm.business.category` (scope purchase)
- `account.move` (purchase business category)
- `account.move.line` (purchase business category)
Prinsip akses:
- user hanya bisa melihat data pada company + `effective_business_category_ids`
- manager purchase tetap dibatasi category efektif
- admin modul tetap dibatasi category efektif
- hanya super admin (UID 1) yang dapat bypass penuh
## Update Akses Ketat (2026-04-16)
Perubahan hardening yang diterapkan:
- ditambahkan guard domain di `purchase.order._search` agar query selalu dibatasi ke company + category efektif user
- ditambahkan `purchase.order.check_access_rule` agar akses lintas category menghasilkan pesan `Access denied`
- bypass validasi yang sebelumnya berbasis `base.group_system` diubah menjadi hanya `SUPERUSER_ID` (UID 1)
Implikasi:
- menghapus filter list default tidak lagi membuka data lintas category
- admin purchase harus tetap didaftarkan ke team/category yang sesuai
## Langkah Deploy
1. restart service Odoo
2. upgrade modul `grt_purchase_business_category`
3. uji user non-super-admin dengan menghapus filter list default dan pastikan data lintas category tetap tidak muncul
4. uji buka record lintas category dan pastikan muncul penolakan akses
+27 -1
View File
@@ -719,7 +719,8 @@ Prinsip akses:
- sales user hanya melihat data pada effective business category-nya
- sales manager mendapat akses lebih luas tetapi tetap dibatasi company dan effective business category
- system admin tidak dibatasi rule bisnis
- admin modul tetap dibatasi company dan effective business category
- hanya super admin (UID 1) yang dapat bypass penuh
## View dan Menu
@@ -849,3 +850,28 @@ Constraint penting yang aktif:
- `frontend_sales.md`
- `frontend_shipping_rule_test.md`
- `sales_customer_behaviour.md`
## Update Akses Ketat (2026-04-16)
Perubahan ini menutup celah akses lintas business category ketika user menghapus filter list default seperti `My Quotations`.
Ringkasan perubahan:
- ditambahkan guard domain di level model `sale.order._search` agar query selalu dibatasi ke:
- `company_id` user
- `effective_business_category_ids` user
- ditambahkan `sale.order.check_access_rule` untuk memberi pesan `Access denied` saat ada akses record lintas category
- bypass untuk `base.group_system` di validasi operasional diubah menjadi hanya `SUPERUSER_ID` (UID 1)
Implikasi operasional:
- admin modul sales tetap tidak bisa lintas category jika tidak didaftarkan ke team/business category terkait
- hanya super admin (UID 1) yang dapat bypass penuh
- perilaku akses Sales selaras dengan kebijakan ketat modul CRM
Langkah deploy:
1. restart service Odoo
2. upgrade modul `grt_sales_business_category`
3. uji user non-super-admin dengan menghapus filter list default dan pastikan data lintas category tidak muncul
4. uji akses langsung record lintas category dan pastikan muncul peringatan akses