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