Yii Framework Forum: regole di accesso - Yii Framework Forum

Jump to content

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

regole di accesso Rate Topic: -----

#1 User is offline   joeysantiago 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 63
  • Joined: 01-April 10

Posted 07 April 2010 - 08:43 AM

ciao a tutti,

uso da poco YII... e sono davvero molto contento. mi permette di risparmiare un sacco di tempo, oltre al fatto che generea codice valido, il che è assai comodo.

purtroppo trovo che la documentazione sia un po' povera, mancano dei tutorial chiari e completi... ecco perché mi rivolgo a voi:

ho collegato il component USerIdentity ad una tabella utenti. Sulla tabella memorizzo un valore equivalente al livello dell'utente. Mettiamo che per semplicità io abbia solo utenti amministratori e normali. Ho poi molti modelli, tra cui models/User.php, e vorrei fare in modo che:
  • gli utenti amminsitratori possano effettuare tutte le azioni
  • gli utenti normali possano accedere solo al proprio profilo utente


per distinguere tra utenti normali ed amminsitratori ho modificato il file components/UserIdentity.php inserendo:
private $_level;
[...]
$this->_level=$user->powerUser;


Ora... devo modificare il file controllers/UserController.php ? qualcuno mi sa dire come?

grazie mille
joey santiago

an Italian with Suomi inside.
0

#2 User is offline   Makis 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 13-January 10

Posted 20 April 2010 - 09:19 PM

View Postjoeysantiago, on 07 April 2010 - 08:43 AM, said:

  • gli utenti amminsitratori possano effettuare tutte le azioni
  • gli utenti normali possano accedere solo al proprio profilo utente



Se hai pochi ruoli, puoi usare le expression nelle acces rules.
Per esempio, dovendo distinguere solo fra admin e users, io ho fatto così
In UserIdentity (nel caso l'autenticazione abbia successo):
$this->_id = $user->id;
$this->username = $user->user_name;
$this->setState('role', strtolower($user->type->name));			
$this->errorCode = self::ERROR_NONE;


poi ho creato un controller base da cui ereditano tutti gli altri controller
con queste regole

	public function accessRules()
	{
		return array(
			array('allow', // admins can do everything
				'expression'=>'Yii::app()->user->getState("role")=="admin"',			
			),
			array('deny', // users cannot create/update/delete
				'actions' => array('update', 'create', 'delete'),
				'expression'=>'Yii::app()->user->getState("role")=="user"', // or !="admin" if you have more than 2 roles			
			),
			array('allow',  // allow all anonymous users to perform login actions
				'actions' => array('login'),
				'users'=>array('?'),
			),
			array('deny',  // deny all anonymous users
				'users'=>array('?'),
			),
		);
	}


in questo modo solo gli utenti admin potranno accedere alle action create/update e delete
mentre per tutti gli altri verrà generata un'eccezione.

nel tuo caso diventerebbe
	public function accessRules()
	{
		return array(
			array('allow', // admins ca do everything
				'expression'=>'Yii::app()->user->getState("role")=="admin"',			
			),
			array('allow', // users can see their profiles
				'actions' => array('profile'),
				'expression'=>'Yii::app()->user->getState("role")=="user"',			
			),
			array('allow',  // allow all anonymous users to perform login actions
				'actions' => array('login'),
				'users'=>array('?'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}



Se hai bisogno di dare accesso anche agli utenti con privilegi minori a determinate sezioni,
puoi fare l'override della funzione accessRules nel tuo controller, seguendo la stessa logica.

Tutto ciò che non è esplicitamente vietato, è concesso, ecco perché nel mio caso non devo
dare accesso agli utenti di tipo user, perché ad essere vietato è l'accesso ai soli utenti non
autenticati.
Devo solo vietargli l'acesso ale azioni che non voglio possa eseguire.

Spero di esserti stato d'aiuto.
0

#3 User is offline   joeysantiago 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 63
  • Joined: 01-April 10

Posted 21 April 2010 - 02:19 AM

grazie mille, sei stato chiarissimo!! :)
joey santiago

an Italian with Suomi inside.
0

#4 User is offline   sensorario 

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

Posted 09 September 2010 - 09:15 AM

Quindi se voglio impedire a chi si chiama Stefano di aggiornare, creare, eliminare qualche cosa in un determinato modulo posso fare così:

        public function accessRules()
        {
                return array(
                        [...]
                        array('deny',
                                'actions' => array('update', 'create', 'delete'),
                                'expression'=>'Yii::app()->user->getName()!="Stefano"',
                        ),
                        [...]
                );
        }


So che la richiesta sembra illogica ma non lo è: voglio capire quanto è versatile Yii.

This post has been edited by sensorario: 09 September 2010 - 09:18 AM

0

#5 User is offline   joeysantiago 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 63
  • Joined: 01-April 10

Posted 09 September 2010 - 09:21 AM

ultimamente ho usato spesso un'estensione che si chiama rights...

usandola si può non solo creare ed usare ruoli & co con molta faclitità, ma anche attribuire a chiunque i permessi su operazioni specifiche.

http://www.yiiframew...tension-rights/
joey santiago

an Italian with Suomi inside.
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