在我的帐户模型中,我有一个名为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('*'),
),
);
}
答案 0 :(得分:0)
所以你的访问规则看起来像这样:
// for access rules
return array(
array('allow',
'actions'=>array('update','delete','admin'),
'expression'=>'$user->isAdmin()'
),
// ...
答案 1 :(得分:0)
我认为您的代码存在一个问题:您的$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
缪斯返回true或false。 AccessControl
应该是这样的:
class AccessControl{
public function allowAdminOnly()
{
if(Yii::app()->user->account_type_id == 1)
return true;
else
return false;
}
}