VonSNAKE
(Von Snake)
September 22, 2014, 10:39am
1
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ść
Bizley
(Bizley)
September 22, 2014, 11:00am
2
Zamiast ‘users’=>array(‘Admin’,‘admin’,‘1’), daj ‘roles’=>array(‘Admin’),
VonSNAKE
(Von Snake)
September 22, 2014, 12:28pm
3
Bizley:
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;
Bizley
(Bizley)
September 22, 2014, 1:01pm
4
A co masz w config dla authManager? Możesz wkleić strukturę tabeli ładowanej do $record?
$Role=new Role; jest niepotrzebne w ogóle.
VonSNAKE
(Von Snake)
September 24, 2014, 8:45pm
5
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
Bizley
(Bizley)
September 25, 2014, 5:23am
6
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
VonSNAKE
(Von Snake)
September 25, 2014, 4:28pm
7
Mówiłem że coś skopałem Nie mam w ogóle takiego klucza w configu, idę zerknąć jeszcze raz na trutki:D co powinienem tam wpisać
Bizley
(Bizley)
September 26, 2014, 6:30am
8
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ć
VonSNAKE
(Von Snake)
October 18, 2014, 5:15pm
9
Czy mogę jakoś użyć 3 lub więcej ról domyślnych ?
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