Membuat User Level Access pada yii

Pada satu kasus saat anda membangun sebuah aplikasi web, kadang ada kondisi dimana anda harus memberikan akses suatu operasi hanya kepada beberapa user tertentu(misal  hanya bisa di akses oleh admin). Biasanya sih, ada beberapa programmer yang membedakan aplikasi admin dan user untuk mengatasi hal ini. Tapi gimana kalo ceritanya ada bnyak jenis user? Di yii framework sendiri kita bisa pake SRBAC extension yg udah ada disini. Tapi yg akan saya jelaskan di sini adalah gmana cara membuat ny secara manual.. Okeh, berikut caranya:

pada models user nya, tambahkan class seperti berikut:

class LevelLookUp{
const MEMBER = 3;
const ADMIN = 2;
const SUPERADMIN = 1;
// For CGridView, CListView Purposes
public static function getLabel( $level ){
if($level == self::MEMBER)
return ‘Member’;
if($level == self::ADMIN)
return ‘Administrator’;
if($level == self::SUPERADMIN)
return ‘SuperAdmin’;
return false;
}
// for dropdown lists purposes
public static function getLevelList(){
return array(
self::MEMBER=>’Member’,
self::ADMIN=>’Administrator’,
self::SUPERADMIN=>”SuperAdmin”);
}
}

tentu anda bisa custom sendiri kalo mau nambahin level yg lainnya..
lalu pada protected/components, tambahkan sebuah class yg mengextend CWebUser, masukkan kode berikut:

loadUser();
if ($user)
return $user->id_level==LevelLookUp::SUPERADMIN;
return false;
}

function isAdmin(){
$user = $this->loadUser();
if ($user)
return $user->id_level==LevelLookUp::ADMIN;
return false;
}
// saving logged users into a state
protected function afterLogin()
{
$this->setState(‘___uid’, $this->id);
return true;
}
// Load user model.
protected function loadUser()
{
if ( $this->_model === null ) {
$this->_model = UserAdmin::model()->findByPk( $this->getState(‘___uid’));
}
return $this->_model;
}
}

rubah kode pada protected/config/main.php menjadi seperti berikut:

‘components’=>array(
‘user’=>array(
// enable cookie-based authentication
‘class’=>’application.components.EWebUser’,
‘allowAutoLogin’=>true,
),

Selesai… Untuk memberi batasan hak akses pada beberapa operasi, lakukan setting seperti berikut pada controller anda:

array(‘allow’, // allow admin user to perform ‘admin’ and ‘delete’ actions
‘actions’=>array(‘index’,’admin’,’delete’),
‘expression’=>’$user->isSuperAdmin()’,
),

Selamat mencoba…

sumber: http://www.yiiframework.com/wiki/191/implementing-a-user-level-access-system/

Saya bukanlah seorang master, hanya seorang pelajar yg mencoba sharing isi kepalanya..

Jika ada kesalahan dari yg saya buat, mohon koreksi…

Semoga membantu…

26 Responses to Membuat User Level Access pada yii

  1. Pingback: Membuat User Level Access pada yii[upgrade] « Sabitlabscode

  2. Pingback: User Level Access Dinamis pada yii framework « Sabitlabscode

  3. orgeous says:

    kk nanya yang kalimat
    “lalu pada protected/components, tambahkan sebuah class yg mengextend CWebUser, masukkan kode berikut”

    itu kan ada 2 file yaitu Controller.php dan UserIdentity.php nah itu letakin di mana ?

  4. sabitzhabit says:

    buat aja sebuah file baru namanya CWebUser.php..

  5. fachrizal says:

    gan, tnya dong ,,,tentang otentifikasi dan otorisasi di yii,,, ane gak ambil data user nya dari database dulu , ane inisialisasi dlu sebagai array di userindentity ,,, gmana ya gan cara user dengan username tertentu dapat melakukan aksi2 tertentu , ane bingung hubuangan di view layout yang main.php terus di controller gmana .. n di modelnya harus gmana….

    ni contohnya gan di useridentity :

    class UserIdentity extends CUserIdentity
    {

    public function authenticate()
    {
    $users=array(
    //username => password
    ‘demo’=>’demo’,
    ‘admin’=>’admin’,
    ‘666666’=>’hadi’,
    );
    if(!isset($users[$this->username]))
    $this->errorCode=self::ERROR_USERNAME_INVALID;
    else if($users[$this->username]!==$this->password)
    $this->errorCode=self::ERROR_PASSWORD_INVALID;
    else
    $this->errorCode=self::ERROR_NONE;
    return !$this->errorCode;

    }
    }

    pingin nya misal ada user dengan username 666666 , maka dia hanya dapat melakukan operasi di controller A saja, gmana ya gan di ngeset nya di main.php terus di controllernya ?? bingung ane gan,,, baca tutorial juga gak ngerti …

  6. klo emang agan mau pake array, agan juga harus definiin level ny di array tersebut gan..
    klo ga ada informasi level, kita ga bisa gan nentuin level nya..

  7. fachrizal says:

    definisiin yang langsung di array tersebut maksudnya gmana gan ? di contohin scriptnya gan ,,, tu diatas codingan ane gan …. thx gan ..

  8. kalo di array agan kan cuma ada variabel “username” n “password” tuh. Nah, agan harus tambahin variabel “level”. Mngkin akan sdikit brubah jadi

    array(‘user’,’password’,’level’) susunan array nya gan..

  9. sinyo2104 says:

    pake extensions yii-user sama srbac aja gan lebih gampang. Mungkin bisa dituliss tutorialnya

  10. iya gan, srbac lebih komplek dari pada buat manual..
    tapi sejauh ini saya belum prnah pake..

  11. Maaf lagi nih mas, untuk tutor kali ini saya bingung harus mulai dari mana.
    apa saya harus buat aplikasi baru / database baru / tabel baru / file baru ?
    saya bener2 masih newbie mas, mohon bimbingannya ya😦

  12. pada postingan lain ada tutor utk membuat hal yang sama seperti ini, tetapi lebih mudah..
    mending liat itu mas..

  13. Arland Herdiana N. says:

    Maaf gan, ane mau tanya.

    itu maksudnya ‘pada models user nya, tambahkan class seperti berikut’ itu apa ya?
    kita timpah models/user.php, bikin class dengan file baru, atau nambah class di models/user.php ?

    tapi kalo nambah class di model/user.php ga bisa gan, ‘Fatal Error: Cannot redeclare class LevelLookUp’

    Mohon bantuannya gan, ane masih newbie..

  14. saya ada buat tutorial lain yang sama persis dengan topik ini tetapi lebih baik dan sederhana.. coba lihat yang disana aja gan.. judulnya mirip2 dengan ini juga..

  15. Dave says:

    gan mau nanya
    kalo ada error fatal error allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in . . . . itu gara2 kenapa ya?
    Saya udah coba gedein memory limitnya di php.ini dari 128mb ke 512mb tetep g bisa juga
    itu kenapa ya gan?
    makasih😀

  16. wah, ga tau juga saya kalo gitu gan.. tapi kalo agan ngeset di php.ini, kalo pake wampp saya 2 tempat yang di edit. Di php.ini yang folder php, dan php.ini yang punya apache..

  17. Nur Ichsan says:

    bit ane mau buat filtering buat user…
    kalo user tersebut sebagai superuser maka bisa liat data2 user lain kayak di gridview.. ..

    nah… pas usernya sebagai user biasa maka di hanya bisa lihat dan mengupdate datanya sendiri??? ada solusi ga bit… ane udah pake rights.. tp ribet kalo usernya udah banyak… kudu peruser… thanks….

  18. kayak nya cuma buat actionAdmin buat superuser utk ngelihat semua data user dan actionMyprofile untuk lihat dan update data dia sendiri.. tinggal actionAdmin di set bisa di akses oleh super user trus actionMyprofile bisa di akses oleh dia sendiri (kalo kayak gini ngontrol hak akses nya langsung di action nya aja mending..)

  19. heri says:

    bang kalo seandainya multi user, untuk membatasi agar user itu yang bisa membuka/melihat (request ddtabase) nya sendiri gimana ya role nya. Misalnya /user/view/4 nah ini kan bisa ngeliat informasi user dgn id 4, kalo kita ganti 5,6,7,8 dst kan juga bisa ngeliat,, gimana ya bang rolenya yang dinamis untuk semua controller?

  20. bisa di taruh langsung di controller nya kalo kayak gitu gan.. di batesin aja if bla bla bla di controller nya..

  21. 3A says:

    yang ini masuk db ga gan..?

  22. deny says:

    gan itu bisa langsung masuk database gak ?

  23. Melia says:

    boleh nanya kak,
    kalau mau bikin aplikasi baru multi user dengan yii, trus usernya memiliki hak akse beda-beda,
    dimulai darimana bagusnya buat aplikasinya kak?
    dari atur login multi usernya dulu atau bikin programnya dulu, baru nanti di akhir baru atur usernya?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: