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

1

Решение

Я думаю, что у вашего кода есть одна проблема: ваш $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;
}
}
0

Другие решения

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

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector