[Solved]Memberikan roles pada user tertentu

halo para suhu2 Yii semua…

Nanya donk, kan ketika login umumnya ada role admin, authenticate ama guest. Nah yang mau saya tanya adalah bagaimana caranya supaya saya mau assign suatu user sebagai admin. Soalnya selama ini saya harus membuat user dengan username ‘admin’ baru bisa, tidak bisa dengan menggunakan username lain. Padahal harusnya tidak begitu bukan? Terima kasih sebelumnya :)

Terakhir saya sudah menemukan caranya… Karena saya lebih prefer cara yang Access control list via fungsi accessRules() daripada RBAC (karena kurang mengerti apa kelebihan RBAC selain bisa hirarki). Saya mendapat referensi dari link ini :

http://blog.dmcinsights.com/2010/01/14/yii-framework-access-control-lists/

http://blog.dmcinsights.com/2010/01/07/custom-authentication-using-the-yii-framework/

Secara default Yii menggunakan ACL dengan membandingkan username CWebUser orang yang login. Oleh karenanya jika kita memiliki 2 orang admin maka kita harus menulis seperti ini :




array('allow', // allow harold and maude user to perform 'admin' and 'delete' actions

    'actions'=>array('admin','delete'),

    'users'=>array('harold','maude'),

),



Nah masalahnya adalah, terkadang user kita bersifat fleksibel, di mana masing-masing memiliki role khusus. Otomatis membandingkan username bukanlah solusinya. Makanya solusi dari blog itu, kita meminta Yii untuk membandingkan roles dengan cara




array('allow',

    'actions'=>array('admin','delete'),

    'users'=>array('@'),

    'expression'=>'isset($user->role) && ($user->role==="editor")'

),



Di sini expression untuk menjalankan script php dan haruslah mengembalikan nilai boolean. Tetapi bagaimana mungkin kita bisa memakai $user->role padahal CWebUser hanya memiliki Username dan Password?? Nah ketika kita melakukan authenticate() pada file components/UserIdentity.php kita harus setState()


$this->setState('role',$users->type);

NB:$users saya itu merupakan User::model() yang memiliki attribute "type".

Jadi akhirnya thread ini dah diblang solve.

Wah, ini yang sy cari. Tetapi bagaimana kalo type usernya banyak misalnya Editor, Administrator, Member, dll?. Bagaimana cara ngeceknya pada controller? ;D.

Terima kasih

Kalau udah banyak mending beralih ke RBAC daripada menggunakan cara ACL lagi…

Itu menurut saya sih~

yepp, bener sekali. walaupun agak susah menggunakan RBAC… ;D

Mantaf gan,

ane juga dulu pernah install tuh RBAC ext. tp emank ribet banget, maklum oop-nya pas-pasan.

kyanya memang untuk kelas berat.

klo ada yang dah make and tau kelebihannya boleh diceritaiin…

Sekarang sih saya dah pakai, cuma saya pakai Srbac, soalnya dah dibikinin deh rbac-nya. Jadi saya cukup tinggal klak klik doank. Soalnya setau saya, rbac ternyata harus dimasukkin satu per satu gitu… maksudnya kita musti masukkin nama action controller(sebagai Operation) satu per satu, masukkin user (sebagai Role) satu per satu, terus hubung2in satu per satu…bisa bego duluan sebelum semuanya selesai dimasukkin.

Kalo pakai Srbac saya tinggal drag klik dah~

itu menurut saya sih :P