В моей модели аккаунта у меня есть атрибут 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('*'),
),
);
}
Я думаю, что у вашего кода есть одна проблема: ваш $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;
}
}