1

在我的帐户模型中,我在注册时有一个名为 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('*'),
        ),
    );
}
4

2 回答 2

0

您可能需要实现类似这个wiki这个

所以你的访问规则看起来像这样:

// for access rules
return array(
      array('allow', 
        'actions'=>array('update','delete','admin'),
        'expression'=>'$user->isAdmin()'
      ),
// ...
于 2015-03-05T07:11:43.453 回答
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可以在任何地方,例如在您的扩展文件夹中。注意allowAdminOnlymuse 返回true 或false。AccessControl应该是这样的:

class AccessControl{

   public function allowAdminOnly()
   {
      if(Yii::app()->user->account_type_id == 1)
        return true;
      else
        return false;
   }
}
于 2015-03-05T08:21:45.690 回答