Startup, dan Leverage dalam usaha
Kita tau belakangan ini banyak startup berguguran. Bahkan di sebuah…
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 :
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.
keren bos.., kebetulan lagi butuh ini.
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
“