yii 中的访问规则限制

Access rules restriction in 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('*'),
        ),
    );
}

您可能需要执行类似这样的操作wiki or this one

因此您的访问规则如下所示:

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

我认为你的代码有一个问题:你的 $account 是一个对象数组,所以你不能使用 $account->account_type_id。这没有任何意义。用户 table 应该有一个 account_type_id 字段。因此,您可以在应用程序的任何位置访问已登录用户的 account_type_id。 你可以试试这个:

array('allow',
        'action'=>array('update', 'delete', 'admin'),
        'expression'=> array('AccessControl','allowAdminOnly'),
        ),

然后你需要在那个class中定义AccessControlclass和allowAdminOnly函数。 AccessControl 可以在任何地方,例如在您的扩展文件夹中。注意 allowAdminOnly 缪斯 return 对或错。 AccessControl 应该是这样的:

class AccessControl{

   public function allowAdminOnly()
   {
      if(Yii::app()->user->account_type_id == 1)
        return true;
      else
        return false;
   }
}