Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/08/2011, 15h55   #1
Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 94
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 94
Points : 48
Points : 48
Par défaut Verifier le propriétaire/personnes autorisée pour une ressource

Bonjour a tous,
Je cherche a implementer le problème suivant:
Un utilisateur doit se connecter pour accéder a une partie du site
Un utilisateur john crée un profil, il y accede ensuite a l'addresse suivante:

www.monsite.com/john ou john est la valeur du slug
Pour acceder a cette ressource il doit s'identifier donc l'accès est en partie restreint. Cependant rien n'empêche Eric qui a un compte sur le site de taper la valeur john dans la barre d'adresse et ainsi consulter/modifier le profil de john a son insu.

Dans un ancien post j'ai lu que Michel Rotta avait préconisé d'utiliser les method dans le fichier routing.yml
Seulement j'aimerai aussi que john puisse par exemple autoriser eric a faire un Get sur l'adresse www.monsite.com/john mais lui interdire un Put,Delete,....
Et si John veut donner un acces temporaire seulement a Eric (2jours, 1h)?
Si on ajoute aussi le fait que john puisse avoir des ressources sous forme d'articles: www.monsite.com/john/mon-article , comment peut il gérer qui a le droit d'acceder a tel ou tel article?

J'ai regardé du coté de OAUTH et des plugins associés mais on y explique seulement comment autoriser la tierce personne a recevoir le token, je n'ai pas compris comment faire pour associer un objet avec son proprietaire et les personnes autorisé pour certaines actions avec cet objet.

Si vous avez des idées de comment implémenter cela, si vous connaissez un plugin, ou meme tuto qui traine car la je cherche depuis une semaine sans succès...

Merci
johnbenz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2011, 11h48   #2
Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 94
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 94
Points : 48
Points : 48
Il y a vraiment personne qui a déjà implémenté un truc similaire??
johnbenz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 11h14   #3
Membre du Club
 
Homme philippe marko
Développeur multimédia
Inscription : février 2010
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme philippe marko
Âge : 26
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : février 2010
Messages : 48
Points : 69
Points : 69
Salut,

D'après ce que j'ai lu, je passerais par des groupes, je m'explique. Quand tu créer un utilisateur, tu lui créer un groupe en même temps, Ensuite il ne reste plus que à ajouter les personnes qui peuvent modifier certaines pages dans ce groupe.

CREATE:
USER => Jhon, GROUP => jhon
USER => Paul, GROUP => paul

Là seul Jhon peut voir sa page car personne d'autre n'appartient à son groupe. Pour que Paul puisse voir sa page il suffit de lui ajouter le group jhon.

ADD GROUP:
USER => Paul, GROUP => paul, jhon
timidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 18h31   #4
Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 94
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 94
Points : 48
Points : 48
Salut et merci pour ta réponse,
Donc si on prend un exemple avec une table User, une table Group et une table Article on aurait les relations suivantes:

un élément de User est associé à un élément de Group dans lequel il est en gros "super admin". Chaque élément de User peut être associé à d'autres Groups avec un credential donné par le "super admin" (propriétaire) du groupe.

Et chaque objet de la table Article est associé à un ou plusieurs Groups avec un certain credential pour y accéder.

On a donc pour chaque action sur la bdd:
-récupération du groupe et du credential nécessaire pour accéder à l'objet
-On regarde si la personne voulant acceder à l'action est bien dans le groupe avec le bon credential, et on autorise ou pas.

C'est bien ça auxquel tu pensais car ça me parait lourd à faire tourner surtout que la table Group sera en relation ManyToMany avec chaque table de la bdd?
Je me demande quel est le principe utilisé par twitter ou facebook, sachant que pour ce dernier quand tu as des millions d'inscrits avec chacun des centaines d'amis et que tu peux mettre des permissions différentes pour tous il faut que le truc soit bien conçu.

Si tu as des liens des sites où tu as vu des infos là dessus?

En tout cas merci ça me donne une piste.
johnbenz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 09h29   #5
Membre du Club
 
Homme philippe marko
Développeur multimédia
Inscription : février 2010
Messages : 48
Détails du profil
Informations personnelles :
Nom : Homme philippe marko
Âge : 26
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : février 2010
Messages : 48
Points : 69
Points : 69
Salut,

Pour moi tu vas trop loin dans la réflexion ...

J'utiliserais le plugin sfdoctrineguardplugin qui créer et gère plusieurs tables, et ces principales fonctionnalités sont:
  • gestion des utilisateurs
  • gestions des groupes
  • gestions des permissions

Mettons que /john est la route qui renvoie au module XXX, ce module par défaut je le mettrais en "secure: true" comme sa tu es sur que l'utilisateur doit être logué pour voir cette page.

Une fois que l'utilisateur TOTO est logué il peut voir cette page mais a-t-il le droit de modifier ou supprimer certains élément, dans ce cas là, je récupère le paramètre GET de l'URL :jhon, ensuite je vérifie si TOTO fait partie du groupe JHON.
Si oui alors dans le template j'affiche un partial menu avec les possibilité autorisé.
Si non pas de partial.

Lors de la création d'un utilisateur JHON, je créé aussi un groupe JHON. donc par défaut l'utilisateur créé pourra faire CRUD sur son profil. Si l'utilisateur veut que TOTO puisse faire un CRUD sur son profil il n'aura plus que à ajouté TOTO dans son groupe. Pour ce faire, une vérification sur IF(USERNAME == GROUPNAME) alors c'est l'administrateur du groupe, donc partial plus menu avec ajouter ou supprimer memebre du groupe.

Regarde le plugin sfdoctrineguardplugin il y a un paquets d'exemple comme le tient et beaucoup plus propre que mon exemple.
timidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 17h14   #6
Membre du Club
 
Homme
Étudiant
Inscription : juin 2011
Messages : 94
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 94
Points : 48
Points : 48
J'utilise déjà sfDoctrineGuardPlugin mais je m'en servais seulement pour de l'authentification un Username et Password. Je ne l'avais jamais utilisé pour les permissions et groupes (je n'avais aucune idée sur la bonne manière de m'en servir)

En tout cas maintenant que j'ai une idée de comment ça marche je vais pouvoir trouve les bons exemples.

Merci
johnbenz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h38.


 
 
 
 
Partenaires

Hébergement Web