Problem Z Autoryzacją

Witam nie wiem co źle robię może wy coś zobaczyć ie?

Mam DB z między innymi dwoma tabelami dotyczącymi użytkownika

tabela 1 users z danymi Login hasło rola (int) w relacji z tabelą role id(int) rName (nazwa roli)

w UserIdentity.php robię coś takiego przy logowaniu:


                        

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

            

			$this->_agent=$record->agents_id_agent;

			$Role=new Role;

			$Answer=$Role::model()->findByPK($record->role_id_role);

			$this->_role=$Answer->rName;

			Yii::app()->authManager->createRole($this->_role);

			Yii::app()->authManager->assign($this->_role,$this->_id);

                        $this->errorCode=self::ERROR_NONE;

Czyli jeśli user ma role_id_role 1 a w tabeli role mam dla id 1 "Admin" to przypisuje tak to bynajmniej rozumiem.

W Kontrolerze mam zapis




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

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

				'users'=>array('Admin','admin','1'), 

i przy próbie wejścia w action admin wywala mi 403 ktoś wie co skopałem?

p.s. Doszedłem do tego że zamiast roli przypisywana jest Nazwa Użytkownika (Login) czyli username. Ma ktoś pomysł jak to obejść:D

Zamiast ‘users’=>array(‘Admin’,‘admin’,‘1’), daj ‘roles’=>array(‘Admin’),

Nie działa:(

Na razie "roboczo" jadę na:


this->_id=$record->id_user;

			$this->_agent=$record->agents_id_agent;

			$Role=new Role;

			$Answer=$Role::model()->findByPK($record->role_id_role);

			$this->username=$Answer->rName;

			/*$this->_role=$Answer->rName;

			Yii::app()->authManager->createRole($this->_role);

			Yii::app()->authManager->assign($this->_role,$this->_id);*/

                        $this->errorCode=self::ERROR_NONE;

A co masz w config dla authManager? Możesz wkleić strukturę tabeli ładowanej do $record?

$Role=new Role; jest niepotrzebne w ogóle.




public function authenticate()

    {

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

        if($record===null)

            $this->errorCode=self::ERROR_USERNAME_INVALID;

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

            $this->errorCode=self::ERROR_PASSWORD_INVALID;

        else

        {

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

			$this->_agent=$record->agents_id_agent;

			$this->setState('rola',$record->role_id_role);

			$Role=new Role;

			$Answer=$Role::model()->findByPK($record->role_id_role);

			$this->username=$Answer->rName;

			/*$this->_role=$Answer->rName;

			Yii::app()->authManager->createRole($this->_role);

			Yii::app()->authManager->assign($this->_role,$this->_id);*/

            $this->errorCode=self::ERROR_NONE;

        }

        return !$this->errorCode;

    }



Tak wiec ładuje sobie to z Modelu User


public function search()

	{

		// @todo Please modify the following code to remove attributes that should not be searched.


		$criteria=new CDbCriteria;


		$criteria->compare('id_user',$this->id_user);

		$criteria->compare('uLogin',$this->uLogin,true);

		$criteria->compare('uPassword',$this->uPassword,true);

		$criteria->compare('uEmail',$this->uEmail,true);

		$criteria->compare('role_id_role',$this->role_id_role);

		$criteria->compare('agents_id_agent',$this->agents_id_agent);


		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

		));

	}




Jak że rola jest tu INT i pobiera ja dopiero z Role




public function search()

	{

		// @todo Please modify the following code to remove attributes that should not be searched.


		$criteria=new CDbCriteria;


		$criteria->compare('id_role',$this->id_role);

		$criteria->compare('rName',$this->rName,true);

		$criteria->compare('rDescribtion',$this->rDescribtion,true);


		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

		));

	}

Po za tym nie wiem czemu mod rewrite mi nie działa


RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php

po włączeniu showScrpt =>false

Wklej proszę zawartość array klucza authManager z /protected/config/main.php

Spróbuj taki .htaccess




RewriteEngine On


RewriteCond %{REQUEST_FILENAME} -s [OR]

RewriteCond %{REQUEST_FILENAME} -l

RewriteRule ^.*$ - [NC,L]

RewriteRule ^.*$ index.php [NC,L]



i dla showScriptName => false

Mówiłem że coś skopałem :D Nie mam w ogóle takiego klucza w configu, idę zerknąć jeszcze raz na trutki:D co powinienem tam wpisać:D

Zobacz tutaj http://www.yiiframework.com/doc/guide/1.1/pl/topics.auth#sec-6

Wybierz odpowiedniego menadżera autoryzacji i stamtąd już powinno ruszyć ;)

Czy mogę jakoś użyć 3 lub więcej ról domyślnych :D?

Trutka

Czyli np zamiast:


return array(

    'components'=>array(

        'authManager'=>array(

            'class'=>'CDbAuthManager',

            'defaultRoles'=>array('authenticated', 'guest'),

        ),

    ),

);

Wrzucić:


return array(

    'components'=>array(

        'authManager'=>array(

            'class'=>'CDbAuthManager',

            'defaultRoles'=>array('admin','moderator','authenticated', 'guest'),

        ),

    ),

);

??

Jakoś nie mogę ogarnąć tego RBAC