Yii Framework Forum: come si usa expression? - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

come si usa expression? Rate Topic: -----

#1 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,987
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 14 October 2011 - 10:13 AM

Che cosa c'è di sbagliato?

Ho provato a scrivere questa regola. Mi trovo nella pagina di aggiornamento di un utente, e voglio che ad aggiornare sia solamente l'utente proprietario dell'account. Ho provato con questo codice. Ma devo aver frainteso l'uso di expression perché non funziona =(.

    public function accessRules() {
        return array(
            array('allow',
                'actions' => array('index', 'view'),
                'roles' => array('*'),
            ),
            array('allow',
                'actions' => array('udpate'),
                'expression' => 'Yii::app()->user->id == $_GET["id"]',
            ),
            array('allow',
                'actions' => array('admin', 'delete'),
                'roles' => array('Admin'),
            ),
            array('deny',
                'roles' => array('*'),
            ),
        );
    }

0

#2 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,987
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 14 October 2011 - 10:37 AM

Ho fatto anche questo tentativo:

    public function accessRules() {

        $return = array(
            array('allow',
                'actions' => array('index', 'view'),
                'users' => array('*'),
            ),
            array('allow',
                'actions' => array('admin', 'delete'),
                'roles' => array('Admin'),
            ),
            array('deny',
                'users' => array('*'),
            ),
        );

        if (Yii::app()->user->id == $_GET['id'])
            $return[] = array('allow',
                'actions' => array('udpate'),
                'users' => array(Yii::app()->user->name),
            );

        return $return;
    }



Ho anche provato a fare un var_dump($record); Mi restituisce un array corretto se mi trovo o meno nella pagina dell'utente. Però ricevo sempre lo stesso messaggio 403: non ho il permesso di accedere.
0

#3 User is offline   Maurizio Domba Cerin 

  • Yii - Yesss It Is !!!
  • Yii
  • Group: Yii Dev Team
  • Posts: 4,359
  • Joined: 12-October 09
  • Location:Croatia

Posted 14 October 2011 - 02:57 PM

Sei siccuro che $_GET['id'] ti da il vore giusto?

sarebbe meglio usare la session... oppure getId() - http://www.yiiframew...er#getId-detail
Find more about me.... btw. Do you know your WAN IP?
0

#4 User is offline   ilovephp 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 128
  • Joined: 04-February 11
  • Location:treviso

Posted 14 October 2011 - 04:28 PM

prova se funziona con un numero...

'expression' => 'Yii::app()->user->id == 1',
la non conoscenza è una brutta bestia
0

#5 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,987
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 16 October 2011 - 08:51 AM

@mdomba: si restituisce il valore giusto
@ilovephp: $_GET['id'] è un numero

Cmq ho risolto il problema nella view, dove mostro un messaggio che dice "hey, non puoi modificare questo profilo. Vai al mio profilo".
0

#6 User is offline   Diegovl 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 27-February 11

Posted 16 October 2011 - 12:46 PM

Nella view? Non era più semplice fare checkAccess('role', $param) direttamente nel controller e passargli i parametri? Temo che $_GET non venga visto dall'expression...
1

#7 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,987
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 16 October 2011 - 02:28 PM

Si era più semplice :-p Non ci avevo pensato. ehehe
0

#8 User is offline   Diegovl 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 27-February 11

Posted 17 October 2011 - 06:59 AM

:P ho avuto i tuoi stessi dubbi/problemi, mi ci è voluto qualche giorno per documentarmi su tutto ghgh

In ogni caso la soluzione che utilizzo sono i filtri (seppur con Rights questa volta).

    public function filters() 
    { 
        return array(
            'updateOwn + test', // applica il filtro updateOwn all'action test
            'rights', 
        );
    }

	public function filterUpdateOwn($filterChain)
	{
		// Controllo il permesso passando il parametro
		if(Yii::app()->user->checkAccess('UpdateOwn', array('userid'=>$_GET['id'])))
                        // rimuovo il filtro "rights" da filters(). 1 è il suo indice, 0 è quello di questo filtro!
			$filterChain->removeAt(1);
		
		$filterChain->run();
	}

    public function actionTest()
    {
        $this->render('test');
    }



Non bisogna dimenticarsi di assegnare la rules "UpdateOwn" a una che viene assegnata a tutti gli utenti, ad esempio authenticated.
0

#9 User is offline   ilovephp 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 128
  • Joined: 04-February 11
  • Location:treviso

Posted 17 October 2011 - 07:54 AM

ciao ragazzi,

una soluzione di questo tipo è errata ?



	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['User']))
		{
			$model->attributes=$_POST['User'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->id));
		}


		if (($model->id)==(Yii::app()->user->id)) {
					$this->render('update',array('model'=>$model,));
		}else{
		
				$this->render('nonseiautorizzato');
		}

	}


con accessrule :
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('update','index'),
				'roles'=>array('modificaPropriDati'),
			),

la non conoscenza è una brutta bestia
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users