yii中的访问规则限制

时间:2015-03-05 06:20:16

标签: php yii access-rules

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

2 个答案:

答案 0 :(得分:0)

您可能需要实施类似wiki或此one

的内容

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

// 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;
   }
}