[Résolu]Vue Différentes (Dans Actionindex) Par Rapport Au Role De L'utilisateur

Bonjour, je suis un débutant dans l’utilisation du Framework Yii, et je n’arrive pas à résoudre un problème. Dans le controlleur de ma classe à traiter, j’ai ceci :


public function actionIndex()

        {

                $dataProvider=new CActiveDataProvider('Absence');

                $this->render('index',array(

                        'dataProvider'=>$dataProvider,

                ));

        }

Ceci m’affiche la liste de toutes les absences de ma base de données.

4980

absence.bmp

Dans mon cas, ‘erty’ est connecté et peut voir la liste de toutes les absences. Or, étant donné son rôle (stocké dans la table contenant tout les utilisateurs), j’aimerai qu’il ne puisse voir qu’une liste de ses propres absences, contenant donc son ‘alias’ (qui l’identifie).

Quelqu’un peut-il m’aider avec ceci ?

Merci d’avance.

slt Remy,

je vais essayer de t’aider…

personnellement j’utilise les ‘scopes’ pour cela.

(il y a surement d’autres voies mais celle-ci me semble assez bien Yiitisée… :rolleyes: )

dans ton controlleur et ton action index du modèle absences modifie le CActiveDataProvider comme suis =>


 $criteria=new CDbCriteria;

		$criteria->scopes='mesAbsences';

		$dataprovider = new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

			'pagination'=>array(

				'pageSize'=>'10',

			)));

dans ton modèle ‘absences’ tu édites la section ‘scopes’ en ajoutant ton filter mesAbsences => (ici en supposant que ton modèle comprenne un champ correspondant au nom de l’utilisateur ‘name’, mais tu devras peut être apdater si tu as juste l’ID du User… :D )


public function scopes()

    {

        return array(

        

            'mesAbsences'=>array(

                'condition'=>"name='".Yii::app()->user->name."'",

                

            ),   

        );

    }	

en espérant que ça te convienne…

Bonjour, a vrai dire je viens de résoudre mon problème d’une autre manière, maintenant ma fonction actionIndex est comme cela :


public function actionIndex()

	{

		if ( (Yii::app()->user->getState('roles') === 'user') )

		{

			$criteria=new CDbCriteria;

			$criteria->compare('collaborateur_alias', Yii::app()->user->id );

			$dataProvider=new CActiveDataProvider('Absence', array( 'criteria'=>$criteria));

			$this->render('index',array(

				'criteria'=>$criteria,

				'dataProvider'=>$dataProvider,

			));

		}

		else

		{

			$dataProvider=new CActiveDataProvider('Absence');

			$this->render('index',array(

				'dataProvider'=>$dataProvider,

			));

		}

	}

Si un utilisateur à pour rôle ‘user’, il ne peut que voir ses propres absences, sinon les autres rôles peuvent voir la liste de toutes les absences. Merci de ta réponse en tout cas.

Cool!!

Tant mieux…

Personellement je préfère régler les ‘accessRules’ dans les controlleurs…pour moi les actions ‘voirTout’ et ‘voirmesAbsences’ sont différentes avec des accesRules différents.

Dans les cas particuliers, je traite les conditions d’affichage dans les views selons les rôles.

L’essentiel c’est le résultat. :rolleyes:

=> mais je ne saurai te dire si j’ai une bonne attitude…

PS : en même temps vu ta réactivité sur le problème que tu as posé tout à l’heure tu as un niveau largement suffisant pour te faire ta propre idée sur Yii et ce assez rapidement… ;)

Salut !

Vos 2 solutions sont fonctionnelles dans le cas où tu ne désirerais pas aller trop loin dans la gestion des droits. Par contre, si tu voulais une organisation des droits plus poussée (par exemple l’administrateur peut tout faire, certains utilisateurs peuvent voir toutes les absences et les modifier, d’autres ne peuvent voir que les leurs, …), là il serait plus recommandé d’utiliser le “contrôle d’accès basé sur les droits”, ou RBAC, implémenté dans Yii. Plus d’infos ici : http://www.yiiframework.com/doc/guide/1.1/en/topics.auth

Bonjour, j’utilise déjà plus ou moins un RBAC, mais je voulais ici adapter les différentes vues (view, list …) par rapport à l’utilisateur et à son rôles également, j’ai réussi a résoudre mon problème grâce à une réponse d’un autre forum, mais je suis toujours ouverts pour des compléments d’informations et d’explications :D

En tout cas merci pour les réponses.

Ah oui ok, je suis resté focalisé sur ta réponse avec “VoirTout” et “VoirMesAbsences”, d’où l’idée du RBAC.

Mais effectivement, si on s’en tient précisément au problème exposé, je trouve la solution de grandoom plus adaptée car utilisant les scopes.

D’accord, j’utilise Yii depuis peu de temps (1 mois a peine) et je trouve ce Framework très efficace, mais il me reste encore énormément de choses à voir !! Pourrais-tu m’expliquer rapidement les Scopes ?

Les scopes, ce sont ce qu’on pourrait appeler des filtres de recherche. Plutôt que de conditionner ton CDbCriteria par exemple, tu peux organiser les filtres (dans le cas de tes absences, tu aurais “toutes” et “miennes” par exemple) comme l’a proposé grandoom dans une méthode “scopes” dans ton modèle. L’avantage, c’est que tu peux ensuite les appeler lors d’un “findAll”. Un article qui l’explique bien si tu n’es pas réfractaire à l’anglais : http://yiiweb.wordpress.com/activerecord/scopes/

Merci a toi RadicalDingos d’avoir pris le temps de m’expliquer ces choses simplement. Je dois réaliser une application web dans le cadre d’un stage, il y a donc une limite de temps que je me dois de respecter. C’est pour cela que pour l’instant je vais passer a un autre point et laisser ce que j’ai réaliser pour ce problème (fonctionne très bien, mais d’après ce que j’ai pu lire sur les Scopes, ceux-là me semblent plus appropriés). Cependant si j’ai le temps avant la fin de la date limite, je changerai ma méthode pour utiliser des Scopes.

Merci à tous pour les réponses :)