Rights роль по умолчанию

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Spot
Сообщения: 74
Зарегистрирован: 2013.04.09, 04:04

Rights роль по умолчанию

Сообщение Spot »

Есть роли Guest и User
Как сделать так, чтоб до авторизации пользователь имеет роль Guest, а после авторизации автоматом назначался роль User?
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Rights роль по умолчанию

Сообщение SiZE »

Тут недостаточно понятно написано?
stop4uk
Сообщения: 159
Зарегистрирован: 2012.12.18, 07:08

Re: Rights роль по умолчанию

Сообщение stop4uk »

rights работает в связке с yii-user или просто?

P.S. Больше данных.....
Spot
Сообщения: 74
Зарегистрирован: 2013.04.09, 04:04

Re: Rights роль по умолчанию

Сообщение Spot »

2 SiZE:
Там написано только для гостей и админов

2 stop4uk
Да, совместно с Yii-User

Main config:

Код: Выделить всё

'authManager'=>array(
  'class'=>'RDbAuthManager',
  'defaultRoles' => array('Guest')
), 
Щас в rights я вручную добавляю роль User (authenticated) каждому вновь зарегистрированному пользователю, но это же неправильно
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Rights роль по умолчанию

Сообщение SiZE »

Spot писал(а):2 SiZE:
Там написано только для гостей и админов
Да, действительно, тогда тебе не подходит. :roll:
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Rights роль по умолчанию

Сообщение SiZE »

Spot писал(а):Щас в rights я вручную добавляю роль User (authenticated) каждому вновь зарегистрированному пользователю
На вскидку, в модели создания пользователя

Код: Выделить всё

public function afterSave() {
    parent::afterSave();
    if( $this->isNewRecord ) {
        // Назначаем права по умолчанию
        Rights::assign( self::ITEM_NAME_USER, $this->id, $bizRule=null, $data=null );
    }
}
 
если будет более элегантное решение, поделись.
stop4uk
Сообщения: 159
Зарегистрирован: 2012.12.18, 07:08

Re: Rights роль по умолчанию

Сообщение stop4uk »

Тогда делаем так:

Код: Выделить всё

'components'=>array(
    #...
    'user'=>array(
        'class' => 'RWebUser',
        'allowAutoLogin'=>true,
    ),
    'authManager'=>array(
        'class'=>'RDbAuthManager',
        'defaultRoles' => array('Guest') // дефолтная роль
    ),
    #...
),
 
В контроллерах есессно

Код: Выделить всё

public function filters(){
    return array(
        #...,
        'rights'
    );
}
 
А теперь по тому что те надо конкретно (в Rights по умолчанию это группа Authenticate)
В модуль «user» в папке components создаем файл OnAfterRegistrationBehavior.php со следующим содержимым

Код: Выделить всё

class OnAfterRegistrationBehavior extends CActiveRecordBehavior{
    
    function afterSave($event){
        
        // получаем таблицу в БД
        $assignmentTable = Yii::app()->getAuthManager()->assignmentTable;
        
        // получаем параметры нового пользователя
        $attr = $event->sender->getAttributes();
        
        // вытаскиваем название роли по умолчанию из настроек модуля rights
        $defRole = Yii::app()->getModule('rights')->authenticatedName;
        
        // добавляем привязку
        Yii::app()->db->createCommand(
                "INSERT INTO {$assignmentTable}
                (`itemname`,`userid`,`bizrule`,`data`)
                VALUES
                ('{$defRole}','{$attr['id']}',NULL,'N;')")->execute();
        
    }
    
}
 
После чего к модели «RegistrationForm» добавляем поведение «OnAfterRegistrationBehavior»

Код: Выделить всё

public function behaviors(){
    return array(
        'OnAfterRegistrationBehavior' => array(
            'class' => 'application.modules.user.components.OnAfterRegistrationBehavior'
        )
    );
}
 
Spot
Сообщения: 74
Зарегистрирован: 2013.04.09, 04:04

Re: Rights роль по умолчанию

Сообщение Spot »

Спасибо stop4uk, получилось!
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: Rights роль по умолчанию

Сообщение lancedevnull »

Код: Выделить всё

class AuthManager extends \CDbAuthManager
{
    public $defaultRoles = array(UserModule::ROLE_GUEST);

    public $assignmentTable = 'user_auth_assign';
    public $itemTable = 'user_auth_item';
    public $itemChildTable = 'user_auth_item_child';

    public function init()
    {
        parent::init();
        $user = \Yii::app()->getUser();
        if (!$user->getIsGuest()) {
            if (!$this->checkAccess($user->getRole(), $user->getId())) {
                $this->assign($user->getRole(), $user->getId());
            }
        }
    }
} 
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: Rights роль по умолчанию

Сообщение lancedevnull »

чего то щас грузанулся в это, решение мое неверно, не предусмотрено удаление юзера, смена роли, плюс можно проверять через isAssigned
Ответить