[Yii Framework] Membuat Level Access User dengan Rights Extension

Selama ini saya selalu membuat sendiri alur dan code untuk melakukan level akses user untuk mengontrol hak akses user pada sistem yang saya buat.. Sebanarnya pada Yii sudah ada extension yang menyediakan fitur untuk pengaturan level akses user ini agar kita dapat membuat pengaturan level akses user secara dinamis pada aplikasi yang kita bangun. Sejauh ini yang saya tahu extension yang sudah populer untuk membuat level akses user di kalangan yii adalah Rights dan SRBAC. Dan walau sudah lama saya memecahkan masalah ini dengan coding sendiri, akhirnya tadi malam timbul rasa penasaran saya untuk mencicipi penggunaan extension dalam kasus ini. Saya bandingkan antara Rights dan SRBAC akhirnya saya pilih Rights.. yah, tidak ada alasan ilmiah kenapa saya pilih Rights daripada SRBAC, hanya berdasarkan total “Like” nya dan rights ada contoh blog nya yang bisa saya coba langsung..

Sebelum lebih lanjut, bagi anda yang belum pernah mencoba membuat level akses user secara manual, saya sarankan jangan langsug menggunakan extension.. Ada baiknya pelajari terlebih dahulu dengan membuat sendiri (di blog ini ada tutor nya).. paling tidak membantu anda dalam mempelajari dan memahami terlebih dahulu tentang level akses user..

Okeh mari kita bahas penggunaan extension ini. Pertama-tama, silahkan download terlebih dahulu extension rights di : http://www.yiiframework.com/extension/rights/ Dan jangan lupa untuk mendownload dokumentasi dan contoh blog nya.. Paling tidak ini bisa sangat membantu ketika anda kesulitasn.. Setelah sudah mendownload nya, silahkan anda buat aplikasi baru anda dengan Yii Framework. Sebelum menginstal rights extension pada aplikasi anda, buatlah terlebih dahulu agar aplikasi anda dapat melakukan operasi login, logout, register yang sudah terhubung dengan database (jika anda tidak tahu caranya, saya sudah pernah posting di blog ini silahkan dicari yak.. 🙂 ). Anda sudah selesai melakukannya ? jika iya baru kita akan satukan extension rights.

Unpack rights extension yang telah anda download tadi lalu pindahkan pada aplikasi anda tepatnya pada direktori “protected/modules”. Kemudian lakukan setting pada file “protected/config/main.php” menjadi seperti berikut :

'import'=>array(
 'application.models.*',
 'application.components.*',
 'application.modules.rights.*',  // mendefinisikan rights modules ke dalam aplikasi kita
 'application.modules.rights.components.*',  // mendefinisikan rights modules components ke dalam aplikasi kita
 ),
'modules'=>array(
 'rights'=>array(
    'superuserName'=>'Admin',
    'userIdColumn'=>'id',    // mengeset nama colom yang menjadi id user
    'userNameColumn'=>'username',  mengeset nama colom yang menjadi username user
    'install'=>true, // jika anda ingin menginstall, jika sudah terinstal dihilangkan saja baris ini
    ),
),
'components'=>array(
  'user'=>array(
    'allowAutoLogin'=>true,
    'class'=>'RWebUser',
 ),
 'authManager'=>array(
    'class'=>'RDbAuthManager',
 ),
),

Sebelumnya perlu anda ketahui bahwa rights extension akan mengakses sebuah model bernama “User” untuk mengecek seorang user. Jika memang anda memberi nama model anda dengan nama lain misal “member”,”tabel_anggota”, dan lain-lain anda harus lakukan pengaturan lagi pada configurasi di atas. Bagaimana configurasi nya? silahkan baca dokumentasi yang ada dari rights extensions..

Jika sudah melakukan konfigurasi di atas, untuk menginstall rights extension di aplikasi anda silahkan mengakses url “http://localhost/namaaplikasianda/index.php?r=rights” pada browser anda.. Jika berhasil, maka pada database anda akan terdapat 4 buah tabel baru yang di generate dari Rights extension. Ingat setelah kita menginstal rights extension user yang diizinkan untuk mengakses nya adalah user yang melakukan penginstalan tadi. Misal tadi saya login dengan username “admin”, secara otomatis si “admin” ini lah yang diizinkan mengakses rights, jika user lain maka tidak bisa.. Tetapi setelah itu si “admin” dapat memberikan hak yang sama kepada user lain sesuai dengan yang dia inginkan.. Setelah sudah terinstal, silahkan masuk kembali ke url di atas.. maka anda akan melihat tampilan seperti berikut :

Okeh, pada menu tersebut terdapat 5 buah menu.. mari kita bahas satu persatu menu tersebut :

  1. Assignment : ini adalah menu yang digunakan untuk memberikak hak akses kepada seorang user. Hak akses yang diberikan bisa dengan cara memberikan pangkat (level) kepada seorang user atau memberikan langsung izin seorang user mengakses sebuah “task” (controller) atau lebih detail lagi sebuah operastion (action di dalam controller). Jadi saya bisa memberikan “sabit” pangkat admin, saya juga bisa mengizinkan “sabit” mengakses controller “PegawaiController” atau saya juga menentukan apakah “sabit” boleh mengakses “actionCreate” yang ada di controller pegawai.. Menarik bukan??
  2. Permissions : disini adalah tempat dimana kita menentukan suatu level boleh mengakses siapa saja. Misal kita memiliki level “momod” kita mengizinkan dia mengakses actionCreate,actionDelete, dan actionUpdate.. kita cukup mengeset nilai “assign”(mengizinkan) atau “revoke” (tidak mengizinkan) pada si level momod. Dan tentu saja ini dapat dilakukan konfigurasinya pada semua level. Note : level admin adalah super user, dia diizinkan mengakses apa saja termasuk menu rights extension.
  3. Roles : tempat dimana kita dapat menentukan level-level yang ada di dalam sistem kita. Misal kita ingin dalam sistem kita ada level “momod”, “content-writer”,”sekretaris” , dan lain-lain.. disinilah tempatnya..
  4. Tasks : kita dapat menentukan tasks apa saja yang ada di dalam sistem kita. Biasanya digunakan untuk memberikan hak penuh pada suatu controller di semua actionnya..
  5. Operations : digunakan untuk melakukan pengesetan level akses user pada suatu action yang ada di controller.

Okeh, sudah saya paparkan.. Jika memang masih sulit dipahami ada baiknya anda langsung mencoba atau membaca kembali dokumentasi rights.. karena  saya juga masih belum terlalu dalam memahami extension ini.. 🙂

Nah, jika telah berhasil cobalah untuk memberi hak akses kepada seorang user baik berdasarkan “task”,”operastion” ,maupun “role” nya.. Jika sudah, ada satu hal lagi yang perlu anda konfigurasi.. yaitu pada file “protected/components/Controller.php” rubahlah extend classnya yang semula seperti ini :

class Controller extends CController

Menjadi seperti ini :

class Controller extends RController

Itu dimaksudkan untuk mengizinkan right extension di terapkan filter nya pada masing-masing controller yang ada di aplikasi kita.. Kemudian jangan lupa di controller kita masing-masing di set code seperti berikut :

public function filters()
 {
   return array(
     'rights',
   );
 }

Hal itu dilakukan untuk memastikan filter yang dijalankan pada controller tersebut adalah filter yang berasal dari Rights extension..

Selesai.. anda dapat mendalami penggunaan rights extension dengan melihat dokumentassi, forum, contoh blog  rights extension di internet maupun website Yii…

Selamat mencoba..

Semoga membantu… 🙂

75 Responses to [Yii Framework] Membuat Level Access User dengan Rights Extension

  1. untuk modules mesti generate di gii ya om

  2. mksd ny modules right nya gan? nggak gan, itu di download di extension rigth ny gan..

  3. it’s works …. wokeh!!!

  4. vjrhcr says:

    gan kalo pakai level user manual (ga pakai extensi), level diambil kan dari user->getLevel()

    nah kalo pakai extensi ini cara mendapatkan nilai user itu termasuk level apa gimana, di pengaturan extensinya kan mengatur pemberian hak akses terhadap View,edit,create,admin, index.

    jadi tujuan ane mau menghilangkan(hide) menu yang ga boleh di akses oleh user tertentu. thanks gan

    Regards

    • bisa caranya seperti contoh dibawah ini

      array(‘label’=>’User’, ‘url’=>array(‘/tbUser’), ‘visible’=>Yii::app()->user->checkAccess(‘user.Index’)),

      ^ itu kalo gak bisa akses user pada index sedangkan user.index sendiri diambil dari permissions yang dibuat.. CMIIW

  5. oh iya ya, bener juga. Saya belum pernah coba juga karena belum prnah buat real aplikasi pake ini mas.. Nanti saya coba explore lagi deh gan.. kalo udah dapet saya posting lagi..

  6. Bang, mau coba inih. saya newbie. thanks ya bang sudah di share, semoga rezeki bertambah dan barokah.

  7. Pingback: [Yii Framework] Menu Dinamis dengan RBAC menggunakan Rights Extension « Sabitlabscode

  8. lovely_vee says:

    saya mendapat error Application web user must extend the RWebUser class. ada solusi? Thanks

  9. ada settingan di config/main.php nya yang belum benar.. coba di cek lagi dai sesuaikan dengan postingan saya di atas mbak..

  10. Panda says:

    bit ane punya masalah disini…
    CDbCommand failed to execute the SQL statement: SQLSTATE[42P01]: Undefined table: 7 ERROR: relation “AuthAssignment” does not exist
    LINE 2: FROM “AuthAssignment”
    ^. The SQL statement executed was: SELECT *
    FROM “AuthAssignment”
    WHERE userid=:userid

    ane pake postgress… itu apanya bit??

  11. fikri says:

    bit ane muncul error kayak gini pasa salah satu user udah si assign?
    You are not authorized to perform this action. (C:\xampp\htdocs\yiiblog\protected\modules\rights\components\RController.php:62)

    #0 C:\xampp\htdocs\yiiblog\protected\modules\rights\components\RightsFilter.php(57): RController->accessDenied()
    #1 C:\xampp\htdocs\yiiblog\framework\web\filters\CFilter.php(39): RightsFilter->preFilter(Object(CFilterChain))
    #2 C:\xampp\htdocs\yiiblog\protected\modules\rights\components\RController.php(36): CFilter->filter(Object(CFilterChain))
    #3 C:\xampp\htdocs\yiiblog\framework\web\filters\CInlineFilter.php(59): RController->filterRights(Object(CFilterChain))
    #4 C:\xampp\htdocs\yiiblog\framework\web\filters\CFilterChain.php(131): CInlineFilter->filter(Object(CFilterChain))
    #5 C:\xampp\htdocs\yiiblog\framework\web\CController.php(292): CFilterChain->run()
    #6 C:\xampp\htdocs\yiiblog\framework\web\CController.php(266): CController->runActionWithFilters(Object(CInlineAction), Array)
    #7 C:\xampp\htdocs\yiiblog\framework\web\CWebApplication.php(276): CController->run(‘error’)
    #8 C:\xampp\htdocs\yiiblog\framework\base\CErrorHandler.php(310): CWebApplication->runController(‘site/error’)
    #9 C:\xampp\htdocs\yiiblog\framework\base\CErrorHandler.php(183): CErrorHandler->render(‘error’, Array)
    #10 C:\xampp\htdocs\yiiblog\framework\base\CErrorHandler.php(108): CErrorHandler->handleException(Object(CHttpException))
    #11 C:\xampp\htdocs\yiiblog\framework\base\CApplication.php(713): CErrorHandler->handle(Object(CExceptionEvent))
    #12 [internal function]: CApplication->handleException(Object(CHttpException))
    #13 {main}

  12. wah, kurang tau juga gan.. ga pernah jga ngalamin error gitu..

  13. @panda : brrti agan tabel nya belum di buat.. di right itu dia akan nambahin tabel baru dulu ke tabel kita.. untuk itu saat pertama kali ngejalanin rights, set di config nya “install”=>true

  14. bhakti says:

    Maaf nih mau tanya, gagal terus install knpa ya, selalu ada pesan

    Error

    An error occurred while installing Rights.
    minta bantuannya

  15. yg di config nya udah ada “install”=>true gan?

  16. endikwin says:

    Semua User kan wajib login agar bisa masuk halaman selanjutnya kecuali Guest. Nah pengaturan right untuk Guest gimana ya gan agar bisa mendaftar? Kemarin Aku coba, guestnya gak bisa melakukan pendaftaran (selalu masuk ke halaman login lagi).

  17. di right nya itu udah ada kok mas level dg tipe guest..

  18. Tapi kok gak bisa create ya, padahal permision create untuk guest-nya sudah aku assign. tapi tetep masuk ke login setiap kali klik create user. trs pernah tak coba permisioannya tak assign semua controller dan viewnya (semua yang ada di daftar) untuk guest tapi tetep masuk ke login. apanya yang salah gan?

  19. sori banget mas baru jawab.. cz lagi banyak kerjaan..
    di config nya yang pengatran untuk authManager, buat kayak gini mas code nya :

    ‘authManager’=>array(
    ‘class’=>’RDbAuthManager’,
    ‘defaultRoles’=>array(‘Authenticated’, ‘Guest’),
    ),

  20. viktor says:

    mang, aku jingok di badge wong plembang, jadi kito pake baso kerajaan bae lah ye….aku minta link yang buat hak akses kau buat dewek na ado dak? aku baco tutor kau di pucuk kau la pernah buat dewek penentuan hak akses nyo…mokasih sebelumnyo 😛

  21. cubo kau search bae mang di blog ini pake kata kunci “level akses”, gek ketemu..

    • viktor says:

      okelah men mak itu mang…mokasih ye…men pake extensi ini belum pacak nak nentuin menu mano yang boleh diakses mano yang idak…men pake manual mestinyo pacak..gek aku cobo dulu mang ye…

  22. mrkoeh says:

    gan, klo error kya gini pas mw install gmna yah??

    CDbCommand failed to execute the SQL statement: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘rsudpku_internal.authassignment’ doesn’t exist. The SQL statement executed was: SELECT *
    FROM `AuthAssignment`
    WHERE userid=:userid

    terimakasih. . .

  23. pertama kali make nya di config nya harus di set dlu “install”=>true gan, biar dia generate dulu database punya dia..

  24. mrkoeh says:

    siip gan,
    udah jalan.hehhe. . .terimakasih

    tpi ad masalah lgi, ketika udah install dan konfigurasi, kok semua user masih bisa akses ke semua task yah??
    = right tidak berfungsi. ..
    ap ad solusi gan??

  25. udah di setting semua gan yang lainnya? sperti di controller dll..

  26. mrkoeh says:

    udah gan, udah di tambah :
    public function filters()
    {
    return array(
    ‘Rights’,
    );
    }

    tpi tetep gak jalan, semua user masih bisa mengakses semua menu. .
    ada solusi gan??

  27. wah, kurang ngerti saya gan kok bisa gitu.. harus nya sih otomatis langsng bisa gan..

  28. Trias says:

    gan udah di install true tapi kok error nya masih sm ya ?

    • apa error nya mbak?

      • Trias says:

        CDbCommand failed to execute the SQL statement: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘sabit.authassignment’ doesn’t exist. The SQL statement executed was: SELECT *
        FROM `AuthAssignment`
        WHERE userid=:userid

        table nya nggak ada gan ,

      • Trias says:

        CDbCommand failed to execute the SQL statement: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘sabit.authassignment’ doesn’t exist. The SQL statement executed was: SELECT *
        FROM `AuthAssignment`
        WHERE userid=:userid

      • Trias says:

        CDbCommand failed to execute the SQL statement: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘sabit.authassignment’ doesn’t exist. The SQL statement executed was: SELECT *
        FROM `AuthAssignment`
        WHERE userid=:userid

        ini gan

      • CDbCommand failed to execute the SQL statement: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘sabit.authassignment’ doesn’t exist. The SQL statement executed was: SELECT *
        FROM `AuthAssignment`
        WHERE userid=:userid

        kyk gni gan

      • di settingan config right nya dibuat status “install”=>true dulu mbak..

  29. Trias says:

    udah di install=> true masih error kek gtu gan

  30. Ruminta says:

    kenapa punya saya ga bisa ya gan?

  31. Ruminta says:

    waktu install tidak ada error, tapi di database tabel tidak ter-generate.
    itu bagaimana gan?

  32. ga ada pesan error nya ya mbak? di dalem protected/module udah ada folder rigths?

  33. Ruminta says:

    ga ada mas,
    folder rights nya juga udah ada kok..

  34. Ruminta says:

    sudah ter-generate, mas.
    thank you.

  35. Intari says:

    maksudnya settingan nama model User itu gmna mas??
    soalnya saya coba nerapin dari aplikasi yang dibuat dari tutorial sebelumnya, yang login dn register, itu kan nama tabelnya tbl_user_admin,,
    di file config nya saya coba:

    ‘components’=>array(
    ‘tbl_user_admin’=>array(
    allowAutoLogin’=>true,
    ‘class’=>’RWebUser’,
    ),
    muncul pesan “Application web user must extend the RWebUser class.”

    klo sebelumnya
    ‘components’=>array(
    ‘user’=>array(…..
    muncul pesannya “include(User.php) [function.include]: failed to open stream: No such file or directory”

  36. gini mbak :

    ‘components’=>array(
    ‘user’=>array(
    ‘allowAutoLogin’=>true,
    ‘class’=>’application.components.EWebUser’
    ),

    • Intari says:

      oke makasihh mas,, kemarin dh berhasil hehe
      cuma ada masalah lagi nih,, gimana caranya Right ini bisa diinstall di oracle mas??
      bingung saya, apa yang harus dirubah selain konfigurasi databasenya?

  37. terkhir saya impelemnt rights di oracle, saya bongkar framework dan rights nya mbak. Soalnya di oracle smua column huruf besar..

  38. joe says:

    om sabit, kalo mau tambah task pada saat update , cuma user itu saja yang bisa update punyanya sendiri gimana?

  39. ande says:

    Kalo tabel usersnya diambil dari 2 tabel berbeda bisa gak ?

    kasusnya begini saya punya 2 module sebutlah forum,dan admin nah disetiap module hakakses masuknya diambil dari tabel user berbeda misal forum=>tbl_frm_user, admin => tbl_user, nah bisa gak right memanage 2 tabel ini ? ty sebelumnya

    btw saya follower juga nih diblogini tapi silent ridear v(^_^)V ini pertanyyan pertama saya hehehehe

  40. sejauh ini setau saya rights cuma mengakomodasi untuk satu tabel aja gan (ini setau saya). Kalo emang struktur tabel user nya sama, bisa juga di buat jadi satu tabel saja dan di tambah sebuah field kategori utk menandakan apakah dia utk admin atau forum..

    oh, sip gan.. yang penting bisa dapet ilmu nya, lebih bagus bisa share balik ilmu agan.. 😀

  41. dewi says:

    apakah
    public function accessRules()
    {
    return array(
    array(‘allow’, // allow all users to perform ‘index’ and ‘view’ actions
    ‘actions’=>array(‘create’,’page’,’sel’),
    ‘users’=>array(‘*’),
    ),
    array(‘allow’, // allow authenticated user to perform ‘create’ and ‘update’ actions
    ‘actions’=>array(‘update’,’view’),
    ‘users’=>array(‘@’),
    ),
    array(‘allow’, // allow admin user to perform ‘admin’ and ‘delete’ actions
    ‘actions’=>array(‘admin’,’delete’,’index’,’view’),
    ‘users’=>array(‘admin’),
    ),
    array(‘deny’, // deny all users
    ‘users’=>array(‘*’),
    ),
    );
    }
    */

    perlu di disabled, jika yh.. gimana cara pengaturan user yg tidak login / tamu… saya bingung

  42. dini says:

    mas.. waktu run http://localhost/grupMerapi3/index.php?=rights

    masuknya kok ke index ya?

    setelah login ada error ini

    CDbCommand failed to execute the SQL statement: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘grup_merapi.authassignment’ doesn’t exist. The SQL statement executed was: SELECT *
    FROM `AuthAssignment`
    WHERE userid=:userid

    pdhal di config/main right nya ‘install’=>true

  43. dini says:

    mas kalo mau atur per action carane gmna ya?
    ex. operator bisa actionView tp gak boleh actionCreate..

    oya..” Generate items ” fungsinya apa ya mas?

    • pada rights mbak bisa set hak akses by module, controller, action secara dinamis. Gunanya generate items itu untuk nentuin list action, module, controller yang mau ditentuin hak akses nya. Soalnya ga mungkin mau dibuat satu persatu.

      Cara per action? generete items aja dulu, setelah itu keluar opsi untuk atur per action..

  44. ulie says:

    saya newbie..
    mau tanya nih..
    🙂
    saya baru buat model pake GII, tapi saya ingin menghilangkan menu login (yang harus di akses oleh admin dan harus memasukan username dan password), sedangkan saya cuma ingin di akses oleh user (tanpa harus login)..

    mohon bantuannya..

  45. Gan, habis nginstall malah muncul peringatan ‘Error 403. There must be at least one superuser!’. Ada solusi gan?

    Makasih.

  46. Rangga says:

    bit mau minta solusi nih
    ane udah atur ‘install’=>true; di confignya…
    tapi kenapa masih ga bisa ya?
    selalu muncul an error occurred while installing rights.
    mohon bantuannya.

  47. nisa says:

    mas sabit, saya punya kasus begini. misalkan saya punya tabel guru yang di dalamnya ada data guru A dan guru B. semisal saya login sebagai guru A, saya hanya bisa mengutak-atik (view, update, delete) data yang ada di guru A, tapi tidak bisa melakukan hal serupa pada guru B.
    kalo hak aksesnya kaya gitu, bisa ndak, mas??

  48. de says:

    mas nanya, ni saya masih newbi banget, waktu saya habis konfigurasi sesuai petunjuk di atas, saya belum bisa install rights nya tapi menemukan error :
    Error 500
    Property “CWebApplication.authManager” is read only.
    sudah tak cari2 blm ketemu jawabannya knp,

    mohon bantuannya ya

    teimaksih

    • hmmm, belum pernah nemu juga sih.. di install nya udah di set “true” gan? kalo udah di set true dan sukses buka rights nya, di kembalikan jadi false lagi gan..

  49. Maullz says:

    Mas klo error nya begini : CDbCommand failed to execute the SQL statement: SQLSTATE[42P01]: Undefined table: 7 ERROR: relation “AuthAssignment” does not exist
    LINE 2: FROM “AuthAssignment”
    ^. The SQL statement executed was: SELECT *
    FROM “AuthAssignment”
    WHERE userid=:userid

    solusi nya gimana? saya pake Postgresql

    • hmm. terus terang selama saya pake rights cuma di mysql yang langsung lancar. Saya belum pernah pake postgre, tapi pernah pake oracle dan butuh banyak sekali perubahan di libary nya..

  50. mas, saya sudah menginstall rights extensionnya. permasalahannya sama dengan mas Yoseph (komentar sebelumnya), error 403 : There must be at least one superuser!
    Saya sudah mengeset superuserName di file config/main.php dan username tsb sudah ada di tabel users. Solusi yang bisa diberikan apa ya mas ? Terimakasih.

    • engga jadi mas. alhamdulillah sudah solved. Saya melakukan sedikit perubahan di tabel authassignment dengan merubah field userid sesuai dengan line userIdColumn di file config/main.php
      Terimakasih mas atas tutorialnya 🙂

Leave a reply to Sabit Huraira Cancel reply