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

Jump to content

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

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

#1 User is offline   Remy 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 11-December 13

Posted 11 December 2013 - 05:59 AM

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.

Attached File  absence.bmp (774.23K)
Number of downloads: 10

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.
0

#2 User is offline   grandoom 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 34
  • Joined: 11-July 12

Posted 11 December 2013 - 08:32 AM

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...
2

#3 User is offline   Remy 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 11-December 13

Posted 11 December 2013 - 09:03 AM

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.
0

#4 User is offline   grandoom 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 34
  • Joined: 11-July 12

Posted 11 December 2013 - 10:33 AM

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... ;)
0

#5 User is offline   RadicalDingos 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 41
  • Joined: 25-July 13

Posted 11 December 2013 - 11:43 AM

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.yiiframew.../en/topics.auth
0

#6 User is offline   Remy 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 11-December 13

Posted 13 December 2013 - 03:37 AM

View PostRadicalDingos, on 11 December 2013 - 11:43 AM, said:

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.yiiframew.../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.
0

#7 User is offline   RadicalDingos 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 41
  • Joined: 25-July 13

Posted 13 December 2013 - 09:38 AM

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.
0

#8 User is offline   Remy 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 11-December 13

Posted 13 December 2013 - 10:21 AM

View PostRadicalDingos, on 13 December 2013 - 09:38 AM, said:

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 ?
0

#9 User is offline   RadicalDingos 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 41
  • Joined: 25-July 13

Posted 13 December 2013 - 12:56 PM

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.wordpr...erecord/scopes/
1

#10 User is offline   Remy 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 11-December 13

Posted 16 December 2013 - 03:16 AM

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 :)
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