Tuesday, March 11, 2008

Access Control List

Hal paling penting dalam membuat aplikasi adalah menentukan sejauh mana nantinya aplikasi tersebut akan digunakan. Biasanya dari pihak developer sendiri ada yang namanya system analis. Beliau ini yang menterjemahkan hasil pembicaraaan ke skema diagram aplikasi.

Nah ketika proses development mulai berjalan, ada beberapa hal yang perlu dipersiapkan terlebih dahulu, diantaranya adalah infrastruktur dan metode pengembangan aplikasinya. Infrastruktur sendiri harus disesuaikan dengan lingkungan usernya.

Jaman sekarang, umumnya user sudah menggunakan database server. Sangat jarang sekali kita temui user yang menginginkan aplikasinya dibuat di database desktop seperti Ms. Access. Bahkan SQLite saja yang sudah sangat mirip dengan database server, sangat jarang digunakan. Umumnya jenis database ini hanya digunakan untuk database lokal yang tidak multiuser.

Nah, untuk metode pengembangan aplikasinya sendiri, karena umumnya saat ini hampir semua bahasa pemrograman sudah mendukung OOP, maka metodenya sendiri bisa disebut sebagai "design pattern". Bahasa pemrograman modern biasanya memiliki framework yang spesifik untuk bahasa pemrograman tersebut. Untuk web aplikasi biasanya disebut MVC framework dimana si developer bisa memisahkan antara user interface dan application logic.

Dengan framework, beberapa developer bisa mengembangkan modul yang berbeda pada aplikasi yang sama, dan pada saat yang bersamaan, para developer ini mengerti apa yang dikerjakan developer yang lain, sehingga apabila satu developer berhalangan, yang lain bisa mengcover pekerjaannya.

Framework tidak harus mahal, malah kebanyakan tersedia gratis, hanya saja memang sangat spesifik terhadap bahasa pemrograman tertentu. Untuk ASP (yang jadul, bukan .Net) malah tidak ada sama sekali, ini wajar karena OOP di ASP nyaris tidak ada.

Nah yang kebanyakan dilupakan banyak orang adalah Access Control List (ACL). ACL mengatur hak akses setiap user yang berada dalam sistem. Bahkan pihak developer sendiri biasanya mengabaikan yang satu ini. Kenapa ACL begitu penting pada awal tahap development?

Gw punya pengalaman pribadi, ketika gw harus membuat aplikasi pendamping untuk MBS. Dari awal development kita fokus ke aplikasinya, terus begitu mengejar deadline. Sampai kritikal point, dimana aplikasi sudah di deploy di client, client tanya gimana ngatur hak aksesnya? Dan karena kita gak prepare untuk itu, kita harus membikin satu modul ACL nya dan imagine, harus go through the code one by one untuk taruh ACL di setiap form dan spesifik ke button, menu dan reports. Waktunya mepet banget dan kita harus ubah sekitar 50-100 tempat di source code.

Nah untuk ACL sendiri sangat bergantung seberapa besar aplikasinya. Dalam arti banyak CMS yang hanya memiliki 3 tingkatan ACL (Admin, Operator, Guest) yang ditanam mati dicode nya. Beberapa CMS memiliki lebih banyak tingkatan ACL, tetapi tetap di tanam dalam codenya.

Untuk sistem yang lebih kompleks, ACL yang seperti ini tidak bisa digunakan. ACL nya harus lebih kompleks agar modul2 tertentu dapat diakses hanya untuk orang-orang tertentu, bukan berdasarkan tingkatan managementnya, tapi berdasarkan usernya. Ini rumit sih, tapi kalo gak disiapin di awal bisa sangat merepotkan di akhir projectnya.

Nah, saya ada cara yang tidak serumit itu, tapi tetap membuat aplikasi fleksibel dan enterprise ready.

Kalau kita perhatikan, operasi dalam database secara general hanya ada Create, Read, Update, Delete (CRUD). Untuk nama-nama modulnya bisa di taruh di table Module dengan bentuk ID, Module Name. Untuk user juga bisa di taruh di table User dengan bentuk ID, UserName.

Nah untuk bagian ACL nya langsung di table dengan bentuk IDModule, IDUser, Add (nama lain dari Create), View (nama lain dari read), Edit (nama lain dari Update) dan Delete. Selain IDModule dan IDUser, semuanya memiliki tipe true/false atau boolean.

Selanjutnya bikin function untuk check ACLnya. Functionnya juga sederhana, kita sebut saja checkACL(idUser, idModule) return valuenya true/false atau boolean. Lalu setiap bikin menu/halaman, check ACLnya, kalau return false, berarti halaman atau menu tersebut diumpetin atau tidak ditampilkan.

Sederhana kan? Tapi menjadi tidak sederhana kalau ACLnya di buat belakangan, berapa banyak page atau menu yang harus diedit?

No comments: