Ограничение правил доступа в yii

В моей модели учетной записи у меня есть атрибут с именем account_type_id при регистрации, если пользователь выбирает свою учетную запись в качестве учетной записи администратора, тогда для него установлено значение 1, если, однако, пользователь будет обычным пользователем, для него установлено значение 2, как мне изменить правила доступа, чтобы только те, для которых установлено значение 1, могли обновлять или удалять?

это пример моего кода

 public function accessRules()
{
    $account=Account::model()->FindAll();
    return array(
        array('allow',  // allow all users to perform 'index' and 'view' actions
            'actions'=>array('index','view'),
            'users'=>array('*'),
        ),
        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions'=>array('create'),
            'users'=>array('@'),
        ),
        array('allow',
            'action'=>array('update', 'delete', 'admin'),
            'expression'=>"{$account->account_type_id}==1",
            ),
        array('deny',  // deny all users
            'users'=>array('*'),
        ),
    );
}

person shychotc    schedule 05.03.2015    source источник
comment
вы хотите добавить правило для нового типа пользователя для обновления и удаления?   -  person Deenadhayalan Manoharan    schedule 05.03.2015
comment
В чем твоя проблема сейчас? {$account-›account_type_id}==1 не работает?   -  person hamed    schedule 05.03.2015


Ответы (2)


Я думаю, что у вашего кода есть одна проблема: ваш $account представляет собой массив объектов, поэтому вы не можете использовать $account->account_type_id. Это не имеет значения. Пользовательская таблица должна иметь поле account_type_id. Таким образом, вы можете получить доступ к account_type_id вошедшего в систему пользователя в любом месте вашего приложения. Вы можете попробовать это:

array('allow',
        'action'=>array('update', 'delete', 'admin'),
        'expression'=> array('AccessControl','allowAdminOnly'),
        ),

Затем вам нужно определить класс AccessControl и функцию allowAdminOnly в этом классе. AccessControl может быть где угодно, например, в папке расширений. Обратите внимание, что allowAdminOnly muse возвращает значение true или false. AccessControl должно быть так:

class AccessControl{

   public function allowAdminOnly()
   {
      if(Yii::app()->user->account_type_id == 1)
        return true;
      else
        return false;
   }
}
person hamed    schedule 05.03.2015
comment
только один вопрос, действительно ли мне нужно передавать account_type_id в пользовательскую таблицу? - person shychotc; 05.03.2015
comment
Да, вы должны добавить это поле в таблицу пользователей и добавить ссылку из него в поле user_id. - person hamed; 05.03.2015

Возможно, вам придется реализовать что-то вроде этой wiki или этот один

Итак, ваши правила доступа выглядят примерно так:

// for access rules
return array(
      array('allow', 
        'actions'=>array('update','delete','admin'),
        'expression'=>'$user->isAdmin()'
      ),
// ...
person Jigar    schedule 05.03.2015