[ASK] bagaimana cara query di yii?

hallo… para master yii, saya punya tabel seperti ini

[font="Courier New"]

======================================================

id | username | password | email | level |

======================================================

1 | masadmin | masadmin | masadmin@gmail.com | 1 |

======================================================

2 | masadmin | usersatu | masadmin@gmail.com | 2 |

======================================================

3 | masadmin | userduaa | masadmin@gmail.com | 3 |

======================================================

saya mencoba untuk bikin acces role dengan menggunakan id

[/font]


return array(

        array('allow',

                'actions'=>array('view','update'),

                'expression'=>"$user->id==3",

        ),

        array('allow',

                'actions'=>array('update','view','create'),

                'expression'=>"$user->id==2",

        ),

        array('allow', 

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

                'expression'=>"$user->id==1",

       )

);

}

Tapi kenapa ya ga pernah berhasil…??

setau saya expression harusnya single-quote (’) gak boleh double-quote (")

coba saja diganti jadi single quote

ini "$user" ngerefer variabel mana yah?

kalo ngerefer ke user bukannya




"Yii::app()->user->id == 1"



yah?

oh… gitu, nanti saya coba dulu.

Thanks sudah di bales. :)

etapi di API Doc nya

http://www.yiiframework.com/doc/api/1.1/CAccessControlFilter

ada contoh




  'expression'=>'!$user->isGuest && $user->level==2',



nah loh, (gak pernah make sih :P)

@om junxiong :

kalau pake single quote


'expression'=>'$user->id==2'

tetep saja belum berhasil.

@om petra :

sebelumnya terimakasih banyak sudah mencoba membantu,

justru itu om… saya masih bingung untuk penggunaan expression, $user belum saya deklarasikan karena saya kira itu sudah ada defaultnya di yii maknnya saya langsung panggil saja idnya.

Terus kalau misalkan pake


"Yii::app()->user->id == 1"

penggunaannya utk expression seperti apa ya? apakah seperti ini


'expression'=>'Yii::app()->user->id == 1'

ya ni om jadi malu…

maklum masih newbie :D

om… saya udah coba


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

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

'expression'=>'!$user->isGuest && $user->level==1',

tapi jadinya, semua user hanya bisa view dan create saja.

tabel saya seperti ini,

UserID, NamaUser, Level.

tapi kalau saya pake ini


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

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

'expression'=>'!$user->isGuest && $user->id==1',

baru bisa, tapi masalahnya yg saya inginkan berdasrkan level nya bukan idnya.

bagaimnana caranya ya??

ya udah,

tinggal "$user->level == 1"

kalau itu sudah saya coba sebelumnya, di tread sebelumnya juga udah ane tampilin


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

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

'expression'=>'!$user->isGuest && $user->level==1',

dia selalu muncul pesan




Error 403


You are not authorized to perform this action.

kalo saya coba pake id dan name, udah jalan tuh


'!$user->isGuest && $user->id==1'

'!$user->isGuest && $user->name==tono'

tapi kalau pake level dia selalu gagal. Sebenernya nama “id” dan “name” darimana ya…? padahal di tabel nama field itu tdk ada, ada nya UserID, UserName. sungguh msh bingung… :blink:

hoo, itu perlu ngedit komponen WebUsernya… coba gini deh…




///protected/components/MyWebUser.php

<?php

class MyWebUser extends CWebUser {


	private $_record;

	

	public function getRecord(){

		if ($this->_record == NULL){

			$this->_record = User::model()->getByPk($this->id);

		}

		return $this->_record;

	}

	

	public function getLevel(){

		return $this->record->level;

	}


}




terus di confignya




///protected/config/main.php


return array(

	//.....

	'components' => array(

           'user' => array(

               'class' => 'MyWebUser',

               'allowAutoLogin' => true,

               'loginUrl' => array('/login'),

            ),

	//....

);

barusan saya coba om, tapi masih gagal.

sebelumnya saya coba pakenya file protected\components\UserIdentity.php


class UserIdentity extends CUserIdentity

{

    private $_id;

    public function authenticate()

    {

        $record=User::model()->findByAttributes(array('NamaUser'=>$this->username));

        if($record===null)

            $this->errorCode=self::ERROR_USERNAME_INVALID;

        else if($record->Password!== md5($this->password))

            $this->errorCode=self::ERROR_PASSWORD_INVALID;

        else

        {

            $this->_id=$record->UserID;

			$this->username=$record->NamaUser;

            $this->errorCode=self::ERROR_NONE;

			$this->setPersistentStates(array(

                'password' => $this->password,

                // set any other user data

                //'id' => $record->UserID,

            ));

        }

        return !$this->errorCode;

    }

 

    public function getId()

    {

        return $this->_id;

    }

}

untuk main.php pake ini


	'components'=>array(

		'user'=>array(

			// enable cookie-based authentication

			'allowAutoLogin'=>true,

		),

itu koding kalu pake ID sudah berhasil, terus sy ubah2 pake level belum bisa juga… bagian mana yg harus di edit ya??

kayaknya gak ada yg salah,

di dokumennya

http://www.yiiframework.com/doc/guide/1.1/en/topics.auth

dibilang




'expression'=>'!$user->isGuest && $user->level==1',



Kode di atas khan gagal gara2 Yii::app()->user gak punya attribute level. Jadi di kode saya ditambahin method getLevel. Harusnya bener

itu class UserIdentitynya udah bener kok,





class UserIdentity extends CUserIdentity

{

    private $_id;

    public function authenticate()

    {

        $record=User::model()->findByAttributes(array('NamaUser'=>$this->username));

        if($record===null)

            $this->errorCode=self::ERROR_USERNAME_INVALID;

        else if($record->Password!== md5($this->password))

            $this->errorCode=self::ERROR_PASSWORD_INVALID;

        else

        {

            $this->_id=$record->UserID;

                        $this->username=$record->NamaUser;

            $this->errorCode=self::ERROR_NONE;

                        $this->setPersistentStates(array(

                'password' => $this->password,

                // set any other user data

                //'id' => $record->UserID,

            ));

        }

        return !$this->errorCode;

    }

 

    public function getId()

    {

        return $this->_id;

    }

}



karena id di WebUser itu khan dapetnya pas Yii::app()->user->login($identity), di mana kalo di kode Yii-nya Yii::app()->user->id itu nanti diisi pake attribute id di UserIdentity…

jadi ya bener…

om petra… ane udah coba-coba belum berhasil juga…

apakah ada setingan/pengaturan yang lain…?? :(

ntah ah :P