Yii Framework Forum: [RISOLTO] Gestione di utenti, permessi, ruoli, ... ho un blocco - Yii Framework Forum

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

[RISOLTO] Gestione di utenti, permessi, ruoli, ... ho un blocco Rate Topic: ***** 2 Votes

#1 User is offline   sensorario 

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

Posted 24 January 2011 - 04:28 PM

Ho creato questo database. Ho creato un utente, ho creato i ruoli, ed una tabella che associa ruoli ad utente. Ho anche creato la relazione MANY_MANY nel model.

CREATE TABLE IF NOT EXISTS `ruoli` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `ruoli` (`id`, `nome`) VALUES
(1, 'amministratore'),
(2, 'commerciale'),
(3, 'segreteria'),
(4, 'capoprogetto');

CREATE TABLE IF NOT EXISTS `ruolidegliutenti` (
  `id_utente` int(11) NOT NULL,
  `id_ruolo` int(11) NOT NULL,
  PRIMARY KEY (`id_utente`,`id_ruolo`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `ruolidegliutenti` (`id_utente`, `id_ruolo`) VALUES
(1, 1),
(1, 2);

CREATE TABLE IF NOT EXISTS `utenti` (
  `id` int(1) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `utenti` (`id`, `username`, `password`) VALUES
(1, 'guest', 'ed368afd377f9c53c30972d4cfc267aa');


Ho bisogno di creare una gestione di permessi, gruppi ed utenti. Sto andando nella strada giusta? Ma sopratutto ... come vado avanti?
0

#2 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 25 January 2011 - 02:11 AM

No no, lascia stare.

Leggi la guida per quanto riguarda RBAC, Yii ha gia' tutto pronto, non devi scrivere una sola riga.

Usa rbac con il database, si configura in main.php cosi':

        'authManager'=>array(
            'class'=>'CDbAuthManager',
        ),


Poi devi aggiungere le tabelle che trovi in framework/web/auth/schema.sql ad e' fatta.

Puoi chiamare Yii::app()->user->checkAccess('admin')
0

#3 User is offline   markux 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 106
  • Joined: 26-November 10
  • Location:Grosseto

Posted 25 January 2011 - 03:18 AM

io ho utilizzato i moduli user e rights per creare questo skeleton di applicazione web

http://code.google.c.../yii-web-start/

user ti permette di gestire gli utenti creando dei profile dei campi necessari e rights la gestione rbac con interfaccia molto pulita e lineare (ti permette di creare le permissions sui metodi dei controller della tua applicazione)

se proprio devi utilizzare le tue tabelle utilizza gii per creare CRUD di ogni tabella e pi aggiusta a tuo piacimento. Ma ti conviene utilizzare tabelle InnoDB con chiavi esterne così gii ti riconosce anche le relazioni senza doverle aggiungere a mano.

ciao
0

#4 User is offline   sensorario 

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

Posted 25 January 2011 - 03:30 AM

Ecco... infatti mi ricordavo di qualche cosa del genere. Vado, leggo, studio e programmo.
0

#5 User is offline   sensorario 

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

Posted 25 January 2011 - 03:58 AM

Si beh, sto seguendo la guida. Però mi aspettavo qualche cosa di più: non c'è un'interfaccia di gestione delle regole e dei permessi? A me piacerebbe andare nel mio pannellino di amministrazione, dire che gli amministratori fanno queste cose, i capi progetto queste altre, i commerciali queste altre ancora, ... non mi è esattamente chiaro come viene gestita sta cosa da Yii. Comunque ... andiamo avanti a leggere ...
0

#6 User is offline   sensorario 

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

Posted 25 January 2011 - 04:19 AM

Il mio pessimismo si è trasformato in stupore. Ho seguito le tue indicazioni zaccaria. Ti voglio sempre più bene e ne voglio anche a Yii. Ho lanciato quanto segue:

/* Definisco tutte le operazioni del sistema */
$auth->createOperation('manageWorkflow', 'manage all stuff');
$auth->createOperation('gestisciCommesse', 'manage all stuff');
$auth->createOperation('gestisciClienti', 'manage all stuff');
$auth->createOperation('gestisciCommerciali', 'manage all stuff');

/* Creo la role super user e le assegno tutte le cose che si possono fare: */
$role = $auth->createRole('superUser');
$role->addChild('manageWorkflow');
$role->addChild('gestisciCommesse');
$role->addChild('gestisciClienti');
$role->addChild('gestisciCommerciali');

$auth->assign('superUser','demo');


Ho controllato le tabelle ed è tutto ok. Però io sono l'utente demo e se faccio

var_dump(Yii::app()->user->checkAccess('gestisciCommesse'));


ottengo un solenne

bool(false);

0

#7 User is offline   sensorario 

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

Posted 25 January 2011 - 04:54 AM

Attenzione!!!! Avrei dovuto fare

$auth->assign('superUser',1);


ovvero l'id del mio utente e non il mio username. Sono andato a vedere all'interno del database. Ho visto che 'demo' stava nella colonna 'userid' e non era semanticamente corretto. Quindi ci ho messo il mio id. Sono tornato nel mio browser. Ho premuto F5. Tutto è divenuto come avrebbe dovuto essere sin dal principio. Anche oggi ho imparato una faccenda nuova.

E siccome sono felice di questo, metto due faccine in segno di felicità: ::) ;D
0

#8 User is offline   sensorario 

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

Posted 25 January 2011 - 04:58 AM

Per completezza, mostro per chi ne potrebbe avere bisogno anche quello che ho inserito nel controller:

	public function accessRules()
	{
		return array(
			array('allow',
				'actions'=>array('admin'),
				'roles'=>array('manageWorkflow'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}


facendo notare che oltre alla keyword 'users' per indicare quali utenti possono essere abilitati o meno da una azione, possiamo usare 'roles' per abilitare, o meno, un'azione.
0

#9 User is offline   falexio 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 13
  • Joined: 02-April 11

Posted 02 April 2011 - 09:57 AM

Ciao a tutti, appena registrato, senza un degna presentazione passo subito ad una domanda per sensorario che ha superato questo problema della gestione degli utenti.
Ho capito dove hai piazzato la funzione accessRules ma non mi è chiaro cosa intendi quando dici "ho lanciato quanto segue". Dove hai inserito quel codice ?
Da questa domanda si può perfettamente capire che mi sono appena affaciato a questo framework che sembra molto potente ma che mi spiazza su alcuni movimenti.
Saluti a tutti
0

#10 User is offline   sensorario 

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

Posted 04 April 2011 - 12:49 PM

View Postfalexio, on 02 April 2011 - 09:57 AM, said:

Ciao a tutti, appena registrato, senza un degna presentazione passo subito ad una domanda per sensorario che ha superato questo problema della gestione degli utenti.
Ho capito dove hai piazzato la funzione accessRules ma non mi è chiaro cosa intendi quando dici "ho lanciato quanto segue". Dove hai inserito quel codice ?
Da questa domanda si può perfettamente capire che mi sono appena affaciato a questo framework che sembra molto potente ma che mi spiazza su alcuni movimenti.
Saluti a tutti


accessRules lo trovi nel controller. In particolare nella cartella /protected/controllers/NomeController.php della tua applicazione. Per capirci, se ti trovi in index.php?r=site/intex sai che il controller è site e dunque il controller lo trovi dentro /protected/controllers/SiteController.php


Se hai ben chiaro l'MVC (Model View Control) non devo spiegarti che cosa sia sto controller. Se sbaglio fammelo notare che ti rispondo molto volentieri.
0

#11 User is offline   Marco Valenziano 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 28-August 11

Posted 28 August 2011 - 09:16 AM

Ciao Ragazzi , mi sono appena iscritto ed ho iniziato ad usare Yii da pochi giorni..

avrei una domanda in merito a questa cosa:

Premetto che avevo già fatto le tabelle USER e GRUPPI dove ogni utente appartiene al proprio gruppo ed ho messo in relazione le 2 tabelle

USER GRUPPO
|_group_id -> id

ora vorrei che le autorizzazioni siano filtrare in base a id gruppo e non a id utente.. come faccio ? :(

Grazie ,
Marco
0

#12 User is offline   sensorario 

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

Posted 07 September 2011 - 01:44 AM

Oi, è un po' vaga come domanda. A prescindere ti sconsiglio di usare soluzioni from scratch: esistono già delle estensioni che fanno fare ad yii tutto quello che serve.
0

#13 User is offline   ilovephp 

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

Posted 04 October 2011 - 03:34 AM

View Postsensorario, on 25 January 2011 - 04:19 AM, said:

Il mio pessimismo si è trasformato in stupore. Ho seguito le tue indicazioni zaccaria. Ti voglio sempre più bene e ne voglio anche a Yii. Ho lanciato quanto segue:

/* Definisco tutte le operazioni del sistema */
$auth->createOperation('manageWorkflow', 'manage all stuff');
$auth->createOperation('gestisciCommesse', 'manage all stuff');
$auth->createOperation('gestisciClienti', 'manage all stuff');
$auth->createOperation('gestisciCommerciali', 'manage all stuff');

/* Creo la role super user e le assegno tutte le cose che si possono fare: */
$role = $auth->createRole('superUser');
$role->addChild('manageWorkflow');
$role->addChild('gestisciCommesse');
$role->addChild('gestisciClienti');
$role->addChild('gestisciCommerciali');

$auth->assign('superUser','demo');


Ho controllato le tabelle ed è tutto ok. Però io sono l'utente demo e se faccio

var_dump(Yii::app()->user->checkAccess('gestisciCommesse'));


ottengo un solenne

bool(false);




Ciao Sensorario,

anche io sto affrontando il problema "ACL".

In quale file vanno inserite ?

::)
la non conoscenza è una brutta bestia
0

#14 User is offline   sensorario 

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

Posted 04 October 2011 - 04:58 AM

Supponi di trovarti nel tuo UserController (insomma.. nel controller dove salvi idati dell'utente). Quindi supponi di aggiornare un profilo. Ti trovi nel metodo:

UserController::actionUpdate();


Supponiamo ora che nella form per modificare i dati dell'utente tu avessi avuto a disposizione un elenco di ruoli:

UserController::actionUpdate(){
    [...]
    $auth->assign($role,$user->username);
    [...]
}


questa ovviamente è solo la parte dell'utente. Sarebbe opportuno costruirsi anche un'interfaccia per creare role ed operations

/* Definisco tutte le operazioni del sistema */
$auth->createOperation('manageWorkflow', 'manage all stuff');
$auth->createOperation('gestisciCommesse', 'manage all stuff');
$auth->createOperation('gestisciClienti', 'manage all stuff');
$auth->createOperation('gestisciCommerciali', 'manage all stuff');

/* Creo la role super user e le assegno tutte le cose che si possono fare: */
$role = $auth->createRole('superUser');
$role->addChild('manageWorkflow');
$role->addChild('gestisciCommesse');
$role->addChild('gestisciClienti');
$role->addChild('gestisciCommerciali');


Nel mio caso specifico, ho una serie di role fisse, quindi la creazione l'ho fatta usando il codice che vedi, ma poi l'ho immediatamente commentato. Quellop che faccio oggi, è assegare o meno un ruolo ad un utente.
0

#15 User is offline   ilovephp 

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

Posted 05 October 2011 - 02:43 AM

View Postsensorario, on 04 October 2011 - 04:58 AM, said:

Supponi di trovarti nel tuo UserController (insomma.. nel controller dove salvi idati dell'utente). Quindi supponi di aggiornare un profilo. Ti trovi nel metodo:

UserController::actionUpdate();


Supponiamo ora che nella form per modificare i dati dell'utente tu avessi avuto a disposizione un elenco di ruoli:

UserController::actionUpdate(){
    [...]
    $auth->assign($role,$user->username);
    [...]
}


questa ovviamente è solo la parte dell'utente. Sarebbe opportuno costruirsi anche un'interfaccia per creare role ed operations

/* Definisco tutte le operazioni del sistema */
$auth->createOperation('manageWorkflow', 'manage all stuff');
$auth->createOperation('gestisciCommesse', 'manage all stuff');
$auth->createOperation('gestisciClienti', 'manage all stuff');
$auth->createOperation('gestisciCommerciali', 'manage all stuff');

/* Creo la role super user e le assegno tutte le cose che si possono fare: */
$role = $auth->createRole('superUser');
$role->addChild('manageWorkflow');
$role->addChild('gestisciCommesse');
$role->addChild('gestisciClienti');
$role->addChild('gestisciCommerciali');


Nel mio caso specifico, ho una serie di role fisse, quindi la creazione l'ho fatta usando il codice che vedi, ma poi l'ho immediatamente commentato. Quellop che faccio oggi, è assegare o meno un ruolo ad un utente.



intanto ti ringrazio per la risposta.

vedo se riesco a farlo parlare.

piu' conosco yii e piu' mi piace
la non conoscenza è una brutta bestia
0

#16 User is offline   sensorario 

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

Posted 06 October 2011 - 05:23 PM

Ah guarda. Io mi sono aperto un blog su yii per quanto amo yii.
0

#17 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 388
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 22 January 2012 - 05:01 PM

Ah che bell'argomento, stò cercando di fare le cose facili gestire le autorizzazioni solo con il modulo rights, vediamo se l'ho capito bene ...

1-> Creo due ruoli (magazzinieri, impiegati )

2-> L'utente FabioM lo assegno al ruolo "Magazzinieri", mentre Pasqualinomaragià agli "Impiegati"

3-> Ora creo un permesso (controller/action) su Invio/pacchiRegali

4-> su Invio/pacchiRegali dò autorizzazione solo al ruolo "Impiegati"

:angry: :angry: accedono tutti !!!! Rights non mi filtra nulla :angry:

why ? thanks

n.b.
Ho usato il controller di rights (RController) stesso risultato...
0

#18 User is offline   giuseppelng 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 74
  • Joined: 09-January 12

Posted 22 January 2012 - 07:09 PM

@sensorario:
Quindi utilizzi i moduli user + rights?
0

#19 User is offline   sensorario 

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

Posted 23 January 2012 - 02:26 AM

View Postgiuseppelng, on 22 January 2012 - 07:09 PM, said:

@sensorario:
Quindi utilizzi i moduli user + rights?


Em... potresti quotare il messaggio a cui ti riferisci?
0

#20 User is offline   sensorario 

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

Posted 23 January 2012 - 02:27 AM

View Postpaskuale, on 22 January 2012 - 05:01 PM, said:

Ah che bell'argomento, stò cercando di fare le cose facili gestire le autorizzazioni solo con il modulo rights, vediamo se l'ho capito bene ...

1-> Creo due ruoli (magazzinieri, impiegati )

2-> L'utente FabioM lo assegno al ruolo "Magazzinieri", mentre Pasqualinomaragià agli "Impiegati"

3-> Ora creo un permesso (controller/action) su Invio/pacchiRegali

4-> su Invio/pacchiRegali dò autorizzazione solo al ruolo "Impiegati"

:angry: :angry: accedono tutti !!!! Rights non mi filtra nulla :angry:

why ? thanks

n.b.
Ho usato il controller di rights (RController) stesso risultato...




Beh se non va c'è sicuramente qualche cosa che non funziona bene: potresti mostrarci tutti i passaggi? Dal file di configurazione, al db, insomma tutto. Così a naso si fa fatica a comprendere dove stia l'errore.
0

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • 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