Restringir search

Oi, tenho uma duvida a respeito do search na model.

Suponha q eu tenho um almoxarifado onde cada usuário possa criar requisições de materiais. Contudo, se o usuário não for administrador/moderador, ele só poderá ver as requisições na admin q tenham sido feitas por ele ( de outra forma: Ele nao pode ver, na admin, todas as requisicoes da tabela ‘requisicao’, apenas aquelas cujo ‘usuario_idusuario’ seja a dele ). Considerando uma chave extrangeira usuario_idusuario na tabela ‘requisicao’, eu não to conseguindo restringir esse retorno de valores na admin. Já tentei alterar a search na model ‘requisicao’, e acho q é por esse caminho, mas n consegui ainda.

Alguêm poderia me ajudar?

Olá Bruno,

Você pode postar o método search() em sua model para verificarmos?

Na verdade, n precisa mais. Consegui resolver sozinho, mas segue o search() final:


	public function search()

	{

		// @todo Please modify the following code to remove attributes that should not be searched.


		$criteria=new CDbCriteria;


		if(Yii::app()->user->getState('tipousuario') != 3) // Se o usuario for administrador OU moderador...

		{

			$criteria->compare('idrequisicao',$this->idrequisicao);

			$criteria->compare('data',$this->data,true);

			$criteria->compare('quantmaterial',$this->quantmaterial);

			$criteria->compare('usuario_idusuario',$this->usuario_idusuario);

			$criteria->compare('setor_codigo',$this->setor_codigo,true);

			$criteria->compare('material_idmaterial',$this->material_idmaterial);

			$criteria->compare('status_idstatus',$this->status_idstatus);

		}

		else // ...Caso contrário o usuário é comum.

		{

			$criteria->compare('idrequisicao',$this->idrequisicao);

			$criteria->compare('data',$this->data,true);

			$criteria->compare('quantmaterial',$this->quantmaterial);

			$criteria->compare('usuario_idusuario',$this->usuario_idusuario);

			$criteria->compare('setor_codigo',$this->setor_codigo,true);

			$criteria->compare('material_idmaterial',$this->material_idmaterial);

			$criteria->compare('status_idstatus',$this->status_idstatus);

			

			$criteria->addCondition("usuario_idusuario = :u");

			$criteria->params[':u'] = Yii::app()->user->getState('idusuario');

		}

		

		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

		));

	}

Mas vlw mesmo assim. :D

Por favor, coloque a solução para que outros que eventualmente tenham um problema semelhante possam ver!

Obrigado

;)

Provavelmente ele coloco o Yii::app()->user->getState(‘tipousuario’) no em:


$criteria->compare('usuario_idusuario',$this->usuario_idusuario);

Ficando assim:


$criteria->compare('usuario_idusuario',Yii::app()->user->getState('tipousuario'));

Sugestão:




        public function search()

        {

                // @todo Please modify the following code to remove attributes that should not be searched.


                $criteria=new CDbCriteria;

                        $criteria->compare('idrequisicao',$this->idrequisicao);

                        $criteria->compare('data',$this->data,true);

                        $criteria->compare('quantmaterial',$this->quantmaterial);

                        $criteria->compare('usuario_idusuario',$this->usuario_idusuario);

                        $criteria->compare('setor_codigo',$this->setor_codigo,true);

                        $criteria->compare('material_idmaterial',$this->material_idmaterial);

                        $criteria->compare('status_idstatus',$this->status_idstatus);


                        if(Yii::app()->user->getState('tipousuario') != 3){

                              $criteria->compare('usuario_idusuario',Yii::app()->user->getState('idusuario'));

                        }

                }

                

                return new CActiveDataProvider($this, array(

                        'criteria'=>$criteria,

                ));

        }