Yii授权访问单个列以进行更新操作

时间:2014-03-18 04:09:23

标签: php yii

在我的Web应用程序中,我想仅为特定列授予一种类型用户的更新操作的访问权限。我用Google搜索了很长时间但找不到解决方案。我该怎么办?   我有一个名为producer offer的表,它有一个名为provide_qty的列。有三种类型的用户,生产者,消费者和管理员。生产者应该能够更新任何列,但消费者应该只能更新名为" provided_quantity"的生产者商品表的列。

我对生产者商品表的访问权限功能

public function accessRules()
    {
        return array
        (
                array('allow', 'actions'=>array('bookOffer','update',), 'expression'=>'isset(Yii::app()->user->type)&&(Yii::app()->user->type==="CONSUMER")'),
                array('allow', 'actions'=>array( 'create','update','delete'),  'expression'=>'isset(Yii::app()->user->type)&&(Yii::app()->user->type==="PRODUCER")'),
                array('allow', 'actions'=>array('manage','createViaSms','view','myOffers'),'users'=>array('*')),
                array('deny', 'users'=>array('*'),),

        ); 
    }

我对消费者需求表的访问规则

public function accessRules()
    {
        return array
        (
                array('allow', 'actions'=>array( 'create','delete','update' ),  'expression'=>'isset(Yii::app()->user->type)&&(Yii::app()->user->type==="CONSUMER")'),
                array('allow', 'actions'=>array( 'manage','view','myNeeds'), 'users'=>array('*'), ),
                array('deny', 'users'=>array('*'),), 

        ); 
    }

1 个答案:

答案 0 :(得分:1)

Yii accessRules控制对controller/action的访问权限。标准的Yii方法是为每个模型/表创建一个update动作。

但您希望控制对模型中的列的访问权限。

所以你有两个选择:

  1. 专门为更新所述列创建action。然后使用accessRules来控制谁可以执行action
  2. 或者对模型使用一个常规更新操作,但 中的操作可以区分用户权限。