27 Januari 2012

Mengatur Hak Akses Modul OpenERP (module security in OpenERP)

Bismillahirrahmaanirrahiim

Ini tentang hak akses dari suatu modul yang kita buat. Intinya saya ingin modul yang saya buat hanya bisa diakses dengan group tertentu.
Kuncinya ada di folder security dari suatu modul.
Agak susah untuk menemukan tutorial tentang hal ini, sampai akhirnya saya coba pahami dan dapat pencerahan deh :)

Oke, kalau kita lihat contoh-contoh modul yang sudah ada, di folder security ada setidaknya 2 file, yaitu:
  • ir.model.access.csv
  • nama_modul_security.xml
Saat pertama lihat isi ir.model.access.csv saya bingung itu kolom maksudnya apa aja ya...
Contoh:


Penjelasan:
  • id dan name itu adalah id dan name access control (menu Administrator > Security > Access Control List)
    Kita bisa lihat name nya sesuai dengan field name di list access control (tabel ir_model_access)
    Kalau id saya belum tahu akan tersimpan di mana ya...
  • model_id:id
    sintaksnya: model_ + nama tabel
  • group_id:id
    id dari group user.
    sintaksnya: nama_modul + id_group_user
    Nah hal ini yang buat saya bingung, karena yang saya pahami group user itu disetting di menu Administrator > Users > Groups
    tapi saya tidak bisa menemukan group contoh: account.group_account_user

    Setelah saya uprek2.. akhirnya saya menemukan pencerahan kembali, yaitu dengan melihat file nama_modul_security.xml. Contoh kita bisa lihat id group_account_user di file account_security.xml
    <record id="group_account_invoice" model="res.groups">
        <field name="name">Accounting / Invoice</field>
    </record>

    <record id="group_account_user" model="res.groups" context="{'noadmin':True}">
        <field name="name">Accounting / Accountant</field>
    </record>
    <record id="group_account_manager" model="res.groups" context="{'noadmin':True}">
        <field name="name">Accounting / Manager</field>
    </record>
Lihat contoh tersebut, yang menunjukkan bahwa id group_id:id account.group_account_user adalah group name Accounting / Accountant yang didefinisikan di modul account (addons/account).


Sedangkan untuk contoh yang saya buat, saya buat 2 group yaitu:
cash_out_voucher.group_co_voucher_user
dan
cash_out_voucher.group_co_voucher_approval


Yang sebelumnya telah saya definisikan di file cash_out_voucher_security.xml

       <record id="group_co_voucher_approval" model="res.groups">
            <field name="name">Cash Out Voucher Approver</field>
        </record>
        <record id="group_co_voucher_user" model="res.groups">
            <field name="name">Cash Out Voucher User</field>
        </record>
  • perm_read, perm_write, perm_create, perm_unlink
    Set 1 jika group tersebut mendapatkan akses di tabel yang didefinisikan di model_id:id
    Set 0 jika tidak dapat akses
    * perm_read: membaca
    * perm_write: edit
    * perm_create: buat baru
    * perm_unlink: hapus data
Yap... selanjutnya jangan lupa definisikan di file _openerp_.py

    "update_xml" : [
        "security/cash_out_voucher_security.xml",
        "security/ir.model.access.csv",
    ],
Restart server dan upgrade modul ... selanjutnya tentukan user mana yang berhak masuk di group yang sudah didefinisikan

Demikan dari saya,
semoga bermanfaat

Tolong koreksi ya kalo ada yang salah...

2 komentar:

  1. ohya ada yang tertinggal,
    model_id:id harus model yang didefiniskan di modul bersangkutan.
    jika ada dari modul lain, maka kita harus buat class untuk menambahkan inheritance modul di dalam modul yg kita buat.
    Contohnya,

    class account_journal(osv.osv):
    _inherit = 'account.journal'

    account_journal()

    CMIIW

    BalasHapus
  2. kalau untuk hak akses gudang ada pencerahan bu?

    BalasHapus