Halo, nama saya Agung. Berasal dari Denpasar, Bali. Blog ini adalah blog harian saya, dari tips dan trick code, curahan hati, dan beberapa tulisan tidak penting.

Menu & Search

ACL on CI with Addendum

September 10, 2011

Seperti janji pada post sebelum nya, saya akan mengintegrasikan CI dan Addendum untuk membentuk suatu system Access Control List untuk sebuah applikasi website.

Ok sebelum lanjut ke code, sebelum nya ada baik nya untuk menjelaskan apa sih ACL yang saya maksudkan. Terdapat suatu penalaran berbeda dari suatu yang saya sebut sebuah ACL dan sistem yang biasa saya temukan dalam implementasi ACL ini. Seperti contoh nya pada ACL pada Zend Framework yang hanya melindungi sebuah resource, ataupun Spring Security yang hampir serupa dengan Zend yaitu dengan melindungi resource dengan annotation @Secured atau didefiniskan pada security XML file nya.

Saya lebih melihat ACL adalah suatu sistem yang mana tidak hanya melindungi resource, tapi juga melindungi action yang terdapat pada setiap controller yang akan di ekspose kepada user.

Contoh nyata pada web adalah sebagai berikut ; Misalkan suatu web applikasi memiliki beberapa level admin. Super admin, user admin, dan site admin dan pada suatu page (yang saya anggap sebagai resource), terdapat beberapa action yang dapat di lakukan oleh admin tersebut. Pada page ini, super admin memiliki semua akses, sedang kan user admin dapat mengedit dan melakukan delete pada page ini, dan site admin hanya bisa melakukan view pada page ini.

Dengan system ACL yang dikembangkan pada Zend maupun Spring, hanya mendeklarasikan apakah user memiliki akses atau tidak pada sebuah resource, tapi tidak terdapat pengaturan lebih lanjut apa saja action yang dapat dilakukan oleh user.

Oleh karena itu saya mencoba untuk mengembangkan sebuah sistem ACL pada Code Igniter (CI) yang dapat berfungsi seperti apa yang saya sebutkan diatas. Dengan sistem ACL ini admin dapat menentukan action yang dapat dilakukan setiap user pada sebuah resouce. (resource yang saya maksudkan disini adalah controller).

Code dapat di download pada : http://code.google.com/p/example-code/downloads/detail?name=crm.zip&can=2&q=
Kemudian contoh database di http://code.google.com/p/example-code/downloads/detail?name=db.sql&can=2&q=

Contoh aplikasi ini menggunakan Codeigniter sebagai framework. Kemudian Mysql sebagai database. Dan memerlukan PHP 5 untuk menjalankan web nya. Saya tidak menggunakan framework untuk Javascript. Dan web apps ini hanya saya coba jalankan pada versi firefox terbaru (firefox 6).

Web aplikasi ini tidak hanya akan mendefinisikan ACL pada annotasi nya, tapi juga akan membentuk Tree yang akan berkorelasi dengan ACL tersebut.

Terdapat 4 buah Annotasi pada contoh tsb. Yaitu :

  1. RestrictUserLogin : untuk membatasi controller dari akses user yang belum login (level : Class & function)
  2. ActionList : List action yang tersedia pada controller (level : Class & function)
  3. TreeNav : jika di deklarasikan, maka fungsi tersebut akan dilist  pada tree navigation, dan jika user memilki akses pada Tree tersebut, maka fungsi ini akan tampil setelah user login.
  4. NodeDesc : Mendeklarasikan mana dari node. akan digunakan oleh TreeNav

Mari kita membreak down.

Dimulai dari hooks. Seperti yang sudah diketahui, dalam lifecycle Codeigniter, Hooks pada Codeigniter dapat dieksekusi pada beberapa event tertentu. contoh nya sebelum controller di eksekusi. Nah tempat ini sangat cocok untuk mendefinisikan authorization pada website. Oleh karena itu saya menambahkan authorization yang akan dieksekusi sebelum request sampai pada controller.

Di fungsi authorize dari class Authorization ini, proses authorisasi dilakukan. Apakah user memiliki hak untuk melihat / mengeksekusi resource pada controller. Fugsi tersebut memanggil fungsi fungsi yang terdapat pada class acl yang di inisialisasi melalu autoload pada CI.

Pada saat penginisialisasian class ACL, class & function tujuan (routing) akan di parse oleh addendum, mencari annotation dengan nama RestrictUserLogin dan Actionlist. Dari meta data class & fungsi tersebut, kita dapat menentukan apakah user memiliki authorisasi terhadap resource yang dituju setelah di cocokkan dengan data yang diretrieve dari database.

Dan setelah user login, user akan mendapatkan tree dari setiap action dari role mereka. Tree navigation berfungsi untuk melakukan scan pada folder controller lalu melakukan parsing pada setiap class & dan function yang terdapat pada class tsb. Kemudian dari class tersebut didapatkan Tree (parent, child) yang akan dipopulate dan di bentuk oleh class tree navigation ini.

Untuk lebih lengkap nya, silahkan di coba saja program nya :p
Login dengan ID : admin, kemudian password admin juga.

Related article

Startup, dan Leverage dalam usaha

Kita tau belakangan ini banyak startup berguguran. Bahkan di sebuah…

Sekolah Anak

Beberapa hari lalu, istri bertanya kepada saya, kemana anak kami…

Istri, IRT atau Kerja atau Usaha?

Pernah ga cowo – cowo yang akan nikah berpikir, istri…

2 Discussion to this post

  1. RDP Labs says:

    keren bos.., kebetulan lagi butuh ini.

  2. halo, gan.. saya coba kug ada error ini table crm.sessions tidak ada
    mohon penjelasannya. terima kasih
    “A Database Error Occurred

    Error Number: 1146

    Table ‘crm.sessions’ doesn’t exist

    INSERT INTO `sessions` (`session_id`, `ip_address`, `user_agent`, `last_activity`) VALUES (’47ae7b297cd09ddd27e203ddfb0ea79b’, ‘127.0.0.1’, ‘Mozilla/5.0 (Windows NT 6.1; rv:10.0.1) Gecko/2010’, 1347384009)

    Filename: C:xampphtdocscrmsystemdatabaseDB_driver.php

    Line Number: 330

Leave a Reply

Your email address will not be published. Required fields are marked *

Type your search keyword, and press enter to search