Technical Training -Part 9-

Alhamdulillah pada kesempatan kali ini kita akan membahas tentang security pada OpenERP. Pada OpenERP, security policy diatur dengan mekanisme akses control yang telah diconfigurasikan. Mekanisme akses kontrol pada OpenERP semuanya akan diatur didalam sebuah group. Intinya, group inilah yang memiliki peran mendasar untuk melakukan hak akses / otoritas mekanisme yang ada pada OpenERP.

Mendefiniskan security pada OpenERP biasanya dengan mengimport menggunakan file *.csv yang disertakan didalam sebuah modul, biasanya terdiri dari nama group dan hak akses apa saja yang bisa dilakukannya terhadap suatu object, seperti read, write, create, dan delete. Mekanisme security ini terdiri dari 2 bagian inti yaitu, Access Right (Hak Akses) dan Record Rules.

Pada tutorial kali ini, kita akan membuat mekanisme security terhadap modul training yang sudah pernah kita buat sebelumnya. Pertama yang kita lakukan adalah membuat sebuah group “Manager Training” dan group lainnya pada file xml seperti dibawah ini :



		<record model="res.groups" id="group_manager">
			<field name="name">Training / Manager</field>
		</record>

		<record model="res.groups" id="group_user_kursus">
			<field name="name">Training / Kursus User</field>
		</record>

		<record model="res.groups" id="group_user_sesi">
			<field name="name">Training / Sesi User</field>
		</record>

		<record model="res.groups" id="group_user_peserta">
			<field name="name">Training / Peserta User</field>
		</record>


Setelah kita membuat group “Manager Training” dan lainnya, lalu kita definikan hak akses apa saja yang bisa dilakukannya. Buatlah sebuah file csv dengan nama “ir.model.access.csv” yang isiinya seperti dibawah ini :


id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
kursus_all,kursus_all,model_training_kursus,group_manager,1,1,1,1
sesi_all,sesi_all,model_training_sesi,group_manager,1,1,1,1
peserta_all,peserta_all,model_training_peserta,group_manager,1,1,1,1
kursus_read,kursus_read,model_training_kursus,group_user_kursus,1,0,0,0
sesi_read,sesi_read,model_training_sesi,group_user_sesi,1,0,0,0
peserta_read,peserta_read,model_training_peserta,group_user_peserta,1,0,0,0

Pastikan file “ir.model.access.csv” telah kita tambahkan pada file __openerp__.py pada baris dibawah ini :


    "update_xml":[
                  "training_openerp_view.xml", 
                  "training_openerp_workflow.xml",
                  "ir.model.access.csv"
                  ],


Untuk memastikan file tersebut terimport dengan baik, maka lakukan pengecekan pada menu Setting -> Groups, lalu ketik di kolom search dengan keyword “Training” dan ceklah satu persatu group tersebut sesuai dengan pendefinisian hak akses dari file csv tersebut.

Setelah kita berhasil membuat group beserta hak aksesnya, kemudian kita buatkan beberapa user untuk mencoba setiap group dan hak akses tersebut. Silahkan untuk mencoba perbedaan dari masing-masing group dan hak akses sesuai dengan user terkait.

Selain hak akses (Acces Right) disana juga ada Record Rules yang menjadi bagian dari mekanisme security di OpenERP. Jika hak akses digunakan untuk memberikan otoritas user pada setiap object/model (read, create, update, delete), sedangkan record rules berfungsi untuk memberikan otoritas data (kumpulan record) di setiap object atau model OpenERP.

Sesuai dengan namanya, Record Rule merupakan sebuah aturan “perizinan” dalam rangka mengakses record sebuah object yang berkaitan dengan “pembatasan” oleh domain yang telah ditentukan. Untuk lebih jelasnya kita langsung saja untuk membuat sebuah record rule yang berfungsi untuk memberikan data kursus sesuai dengan Koordinator (koordinator_id) yang bersangkutan.

Tambahkan coding pada file xml seperti dibawah ini :



		<record id="training_kursus_koordinator" model="ir.rule">
	        <field name="name">Filter Data Kursus Sesuai Koordinator</field>
	        <field ref="model_training_kursus" name="model_id"/>
	        <field name="domain_force">['|',('koordinator_id', '=', False),('koordinator_id','=', user.id)]</field>
	        <field name="groups" eval="[(4, ref('group_manager'))]"/>
	    </record>



Untuk mencobanya silahkan membuat beberapa data kursus dan pilihlah koordinator dari user yang berbeda-beda. Kemudian lakukan login ulang sesuai dengan user-user terkait, maka hasilnya data kursus yang ada sesuai dengan koordinator user login.

Alhamdulillah akhirnya kita telah menyelesaikan tutorial kali ini yang membahas tentang mekanisme security pada OpenERP. Semoga yang sedikit ini dapat bermanfaat dan selamat mencoba …

Advertisements

5 thoughts on “Technical Training -Part 9-

  1. Asalamualaikum wrb wb

    sebelumnya terima kasih kepada Mas Aziz yang telah berbagi ilmu mengenai openerp… semoga berpahala untuk Mas Aziz..
    saya mengikuti training ini dari awal.. berhasil mengikuti dengan modul yang terbentuk sesuai dengan step-step yang dijelaskan… saya ada sedikit permasalahan di bagian security ini.. secara programming tidak ada masalah.. berjalan dengan smooth.. hanya pada saat implementasi dengan.. saya mencoba membuat users owner yang dimasukkan kedalam group manager, serta user koordinator yang dimasukkan kedalam group kursus user.. setelah itu saya log in menggunakan user owner sebagai manager.. dan kemudian membuat record kursus baru dengan memasukkan nama kursus serta sesi sesi nya…nah pada saat saya memasukkan koordinator pada kursus tersebut terjadi error seperti ini…. Access Denied
    The requested operation cannot be completed due to security restrictions. Please contact your system administrator.(Document type: training.kursus, Operation: read)… tetapi apabila kita mengosongkan field koordinator tersebut..record kursus tersebut bisa ter create dengan baik termasuk sesi-sesi nya.. kira-kira kenapa yah… mohon pencerahan mas.. thanx

    • Wa’alaikumussalam warohmatullah …

      Salam kenal mas, terima kasih atas apresiasinya.
      Untuk errornya seperti yang mas sebutkan, hal itu dikarenakan group manager tidak mendapat akses read pada object training.kursus (mungkin salah copy). Solusinya seperti ini :

      1. Masuk ke Setting -> Groups. Lalu cari group Training Manager.
      2. Masuk ke tab Access Right. Lalu cari object training.kursus, pastikan akses Read Access telah tercentang

      Jika masih tidak bisa, tambahkan langkah ini :

      3. Tambahkan object baru pada tab Access Right tadi yaitu object res.users, lalu berikan akses Read, Write, Create, Delete.

      Semoga berhasil …
      Ayo gabung ke komunitas OpenERP Indonesia di aplikasi Telegram dengan mengirim pesan ke no saya 08788-107-1515

      • wah..cepet banget responsnya… saya sudah ikutan komunitas nya..cuma karena masih baru banget ya jadinya saya baca baca dsini dulu sambil belajar..belum bisa post post di komunitas..nah itu dia mas.. saya dah cek ke setting->group->training manager..cek access right nya sudah di centang semua pada object training.kursus.. dan langkah ketiga juga sudah di laksanakan..tambah object users di check all..tapi tetep juga..kenapa yah.. warning nya sama juga… apa cara implementasi saya yg salah yah..?

  2. Maaf mas, sepertinya ada kesalahan code untuk Record Rulesnya. Seharusnya record rule itu berfungsi untuk membuat Kursus dengan koordinator user terkait (yg input). Jadi jika kita membuat Kursus & mengisi field Koordinator dengan user kita maka error diatas tidak akan terjadi.

    Untuk solusinya adalah dengan menghilangkan record rule contoh diatas pada group Training Manager, yaitu :

    1. Masuk ke Setting -> Groups. Lalu cari group Training Manager.
    2. Masuk ke tab Rules. Lalu hapus record rulesnya.

    Lakukan refresh …

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s