Mi Spiegate Il Concetto Di 'componente' ?

Salve a tutti.

Mi sto avvicinando ad Yii solo ora, per necessità aziendali. Non ho alcun problema a capire MVC, la gestione delle action, delle view , etc…

Mi sfugge cosa intende ‘Yii’ per ‘component’. Mi spiego, forse, meglio:

Esempio: ho una lista di nomi, per ciascun nome ogni mese l’operatore segna il totale ore di lavoro.

La tabella dei lavoratori è in un model

La tabella delle ore è in un model, con una chiave che punta al lavoratore.

Problema: ho tre user

  • uno può solo vedere, tutto

  • gli altri due possono inserire e modificare i dati, compreso creare nuovi user )

… devo crearmi qualche tipo di componente per gestire questo tipo di permessi ?

Lo chiedo perchè ho tantissima confusione in testa, e nel tutorial su Yii (che ti fa creare il model e le view per User) è detto che bisogna customizzare il componente UserIdentity (cos’è ???) per gestire le permission …

mi aiutate a fare un poco di chiarezza ?

Per il discorso dei permessi puoi darti una bella lettura (tutta italiana) qui :)

Forse nel tuo caso Rights e’ una estensione un po’ troppo vasta, puoi cavartela con un flag nella tabella utente e delle funzioni per sapere il suo ruolo.

Leggi la documentazione circa CWebUser, puoi estendere la classe e aggiungere i metodi che ti servono, in modo da poter chiamare


Yii::app()->user->isAdmin

per esempio.

Grazie, tenendo conto che questa è l’applicazione ‘demo’ con cui il team sta studiando Yii, l’installazione di estensioni NON è concessa.

Per tramite il webuser è possibile realizzare anche cose tipo: posso leggere ma non cancellare un record ? oppure visto che c’è il link ‘cancella’ … è possibile far si che in base al ruolo dell’utente quel link NON venga fuori … ?

Domanda iper-stupida: CWebUser è un componente ?

Ma la mia tabella user è mappata in un model … che viene usata da un controller … perchè devo passare da un component ? perchè è condiviso dall’intera app ?

PS: FELICISSIMO di essere entrato in questa community

A, gia’, primo post, non avevo notato.

Benvenuto nel forum!

Certo, in CMenu mi sembra che ci sia la proprieta’ visible, puoi impostare:


'visible'=>Yii::app()->user->isAdmin

Ma, piu’ importante, puoi usare questa funzione come espressione per i filtri delle action.

mi fai un esempio di questa ultima possibilità ?

Nel frattempo sto studiano “Agile Web Development with Yii And PHP 5”, giusto per limitare le domande che vi farò… e per avere una idea della filosofia d’uso del framework, cosa che dal tutorial ufficiale decisamente NON traspare


	/**

	 * Specifies the access control rules.

	 * This method is used by the 'accessControl' filter.

	 * @return array access control rules

	 */

	public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' actions

				'actions'=>array('index','view', 'update', 'create', 'delete'),

				'expression'=>'$user->isAdmin',

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}

Here is the doc

visto che sei in sessione di prova… puoi provare ad utilizzare gii per creare le crud,

quindi ti creerà per il model scelto, il controller con le crud e le relative view.

nel controller puoi osservare questa parte qui:




	public function filters()

	{

		return array(

			'accessControl', // perform access control for CRUD operations

		);

	}


	/**

	 * Specifies the access control rules.

	 * This method is used by the 'accessControl' filter.

	 * @return array access control rules

	 */

	public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' actions

				'actions'=>array('index','view'),

				'users'=>array('*'),

			),

			array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create','update'),

				'users'=>array('@'),

			),

			array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('admin','delete'),

				'users'=>array('admin'),

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}



in accessRules puoi filtrare l’accesso sulle action come ti crea gii.

A questo punto all’utente che può solo vedere gli assegni index e view

Agli ‘admin’ dai accesso su admin,create e update. come ti suggeriva zaccaria nel precedente post.