Perbaikan Modul dengan BC
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user