Ограничение правил доступа в 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('*'),
        ),
    );
}

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 муза возвращает истину или ложь. AccessControl должно быть так:

class AccessControl{

   public function allowAdminOnly()
   {
      if(Yii::app()->user->account_type_id == 1)
        return true;
      else
        return false;
   }
}

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

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

// for access rules
return array(
      array('allow', 
        'actions'=>array('update','delete','admin'),
        'expression'=>'$user->isAdmin()'
      ),
// ...
Другие вопросы по тегам