Fork me on GitHub




« 1 2 (3) 4 »


Re: limiter les droits dans l'édition des utilisateurs
Guest_
RE,

Bon j'ai réussi j'ai tester ça marche.

En premier lieu faut pas faire ce que j'ai mi dans mon précédent post lol si c'est fait faut effacer ;)

Ensuite faut modifier ton compte webmestre et le faire appartenir uniquement au groupe webmestre car par défaut il appartient au groupe webmestre et au groupe utilisateur enregistré. Pour faire ça tu peut aussi aller directement dans ta base de donné via phpmyadmin et modifier la _group_permission et la ou y'a le uid 1 tu supprimer la ligne ou y'a groupid 2.

Bon une fois que tu as fait ça, tu vas aller modifier le fichier /kernel/user.php et trouver la fonction :

getObjects($criteria = null, $id_as_key = false)

dans cette fonction en dessous de :

$sql 'SELECT * FROM '.$this->db->prefix('users');


tu vas rajouter cette condition :
if(isset($_GET['fct']) && $_SESSION['xoopsUserGroups'][0] != "1") {
        
$sql .= ' U WHERE NOT EXISTS (select 1 from '.$this->db->prefix('groups_users_link').' G WHERE groupid = 1 and U.uid = G.uid)';
        }


Voilà maintenant tu peux tester en créant un nouveau groupe que tu nomerai je sais pas moi par exemple sous-webmestre tu donne les même droits qu'un utilisateur enregistré avec en plus le droit d'éditer des utilisateurs et rien d'autre

tu créer un nouveau compte ou tu transfère un compte existant dans ce nouveau groupe et tu pourra tester ^^ ça marche.

Tiens moi au courant

Posté le : 26/10/2007 18:07
Partager Twitter Partagez cette article sur GG+
Re: limiter les droits dans l'édition des utilisateurs
Régulier
Inscrit: 06/01/2006 23:55
Messages: 379
Si je peux me permettre, sur la requete que tu donnes deja de base sur exists ou not exists le * sert a rien tu peux juste mettre X ou 1 ca ira plus vite (le but d'un exists et de juste verifier si Vrai ou faux en fait... si tu mets * la sous requetes ramene l'ensemble des donnees ce qui sous entend une lecture physique des donnees dans la base).

Ensuite au final la requete que tu as donne fait
select * from users u where exists (select X from groups_users_link G WHERE G.uid = U.uid AND G.groupid != 1)
Ce qui en français fait que tu recherche tous les user qui sont dans des groupes autres que le 1. Effectivement tu es oblige de sortir du coup les webmasters des autres groupes avant car s'il est dans le groupe 1 et un autre tu le verras.

Tu peux faire celle-ci :
SELECT * FROM users U WHERE uid not in (select uid from groups_users_link WHERE groupid = 1)
Qui te donnera tous les utilisateurs qui ne sont pas dans la liste des utilisateurs du groupe 1 (webmestre) et pour celle la tu n'as pas besoin de sortir ton webmestre des autres groupes dans lequel il pourrait etre.
ou si tu preferes le exists ou plutot not exists
SELECT * FROM users u WHERE NOT EXISTS (select 1 from groups_users_link G WHERE G.uid = U.uid AND G.groupid = 1)

Posté le : 26/10/2007 21:53
Partager Twitter Partagez cette article sur GG+
Re: limiter les droits dans l'édition des utilisateurs
Guest_
Oui en effet ta requête est mieu optimisé not in c'est mieux que d'exclure avec un exists (Grrr un peux agacé de pas y avoir pensé tout seul )

Ensuite select 1 from ........ tu es sur que ça marche car là où tu met 1 tu met soit * soit le nom des champs de ta table or le 1 n'existe pas sur la table groups_users_link à la place de 1 je mettrai plutôt groupid ça serrait plus logique , car là tu fais un select sur un champ qui n'existe pas ça ne vas engendrer une erreur?

Si je me trompe éclaire moi sur point stp.

de toute façon ta requête avec not in est meilleur je vais modifier mon précédent post.

Comme quoi c'était pas si difficile pour que ça marche

Posté le : 26/10/2007 23:22
Partager Twitter Partagez cette article sur GG+
Re: limiter les droits dans l'édition des utilisateurs
Régulier
Inscrit: 06/01/2006 23:55
Messages: 379
j'aurais tendance a te dire de tester

Mais je t'assure que cela marche...
Enfait exists ou not exists verifie par rapport au fait que ta sous requete te ramene qqchose (n'importe quoi) ou rien du tout. C'est soit un ensemble qui veut dire vrai soit rien du tout qui veut dire false.

Sinon dans n'importe quel requete tu peut ramener autre chose que ce qu'il y a dans les colonnes de la table. L'interet est limité en general sauf sur exists ou not exists.

rien ne t'empeche de faire
select 'toto', col1, col2 from table where ...

L'interet majeur de ce system sur les exists ou not exists c'est que ta sous requete ne ramenant pas de colonne de la table tu n'as pas de lecture physique de la dite table, donc gain de perf et pas de prise de place en memoire des dites donnees (=> gain de perf aussi).

Pour la perf entre not in et exists franchement faudrait regarder ce que fait reellement la base, j'ai vu des cas sur Oracle (que je connais bien mieux que MySQL) ou l'un etait meilleur que l'autre et vice-versa. Ca depend pas mal de ta volumetrie dans la table ainsi que de sa structure (donnees et index primaire etc...). Donc faudrait lire les optimisation des requetes que fait MySQL pour savoir. De toutes manieres des que tu as un NOT c'est moins bon que lorsque tu ne l'as pas
Normalement sur la requete avec NOT IN la sous requete doit etre effectuer qu'une seule et unique fois. Et apres les tests se font par rapport au sous ensemble ramene. Par contre on verifiera la totalite des donnees ramenees pour toutes les lignes de la table user.
Avec le not exists la sous requete sera faite autant de fois que le nombre d'user dans la premiere table, mais elle utilise un index.


En l'occurence pour la table groups_users_link elle a quand meme un pb de construction cette table... sa cle primaire ne sert a rien tel quel... il ne devrait y avoir sur cette table qu'une cle primaire comprenant les 2 champs groupid et uid. C'est largement suffisant et ca serait un peu plus performant pour tous les acces fait sur cette table...

Posté le : 27/10/2007 11:05
Partager Twitter Partagez cette article sur GG+
Re: limiter les droits dans l'édition des utilisateurs
Régulier
Inscrit: 14/06/2004 13:20
Messages: 374
Pfiou les gars j'arrive pas à suivre,

@7 : non j'avais laissé tomber en attendant (???) de progresser en programmation.

La, je ne pourrais pas dans l'immédiat (avant 4 jours) tester mais :

1. je suis de très près votre échange (pour les choix de prog mais aussi pour le sujet précis, bien sûr),

2. c'est une fonctionnalité qui sera très précieuse à beaucoup.

Donc merci encore les gars

Posté le : 27/10/2007 13:48

Baronxoops d'accord, mais loin d'être le roi
Partager Twitter Partagez cette article sur GG+
Re: limiter les droits dans l'édition des utilisateurs
Régulier
Inscrit: 06/01/2006 23:55
Messages: 379
en fait la solution de 7wave est simple et efficace, et a la limite je me demande si elle devrait pas etre mise de base.
On permet tout utilisateur habilite d'editer les utilisateurs sauf ceux du groupe webmestre. Donc pas de pb de mot de passe modifier ou autre. En terme de securite ca me parait pas mal.

Par contre en tant que utilisateur lambda tu peux modifier mais pas changer les groupes des utilisateurs et il me semble que toi tu veux pouvoir modifier les groupes des utilisateurs non? Si c'est le cas il reste ce point a voir.

Posté le : 27/10/2007 14:37
Partager Twitter Partagez cette article sur GG+
Re: limiter les droits dans l'édition des utilisateurs
Guest_
Bonjour,

Bon alors j'ai tester tu peux en effet mettre 1 ou X avec un EXISTS ça pose pas de problème.

Par contre après quelques petites recherches il s'avère qu'avec oracle faire un IN ou un EXISTS n'a pas d'incidence sur la rapidité d'exécution, mais sous SQL un IN serra plus rapide qu'un EXISTS sur des petites tables et inversement sur des grosses tables.

Donc la requête final est la suivante :

$sql .= ' U WHERE NOT EXISTS (select 1 from '.$this->db->prefix('groups_users_link').' G WHERE groupid = 1 and U.uid = G.uid)';


Et Baron XOOPS tu peux faire un copier coller du code dans tous les cas ça marche ;)

PS :
Je modifie mon post plus haut

Posté le : 27/10/2007 14:41
Partager Twitter Partagez cette article sur GG+
Re: limiter les droits dans l'édition des utilisateurs
Régulier
Inscrit: 14/06/2004 13:20
Messages: 374
Merci les gars !!!

@garrath : je vérifie juste la possibilité de modification et puis j'édite en résolu ou pas.

Posté le : 27/10/2007 19:08

Baronxoops d'accord, mais loin d'être le roi
Partager Twitter Partagez cette article sur GG+
Re: limiter les droits dans l'édition des utilisateurs
Régulier
Inscrit: 14/06/2004 13:20
Messages: 374
Bon, ça y est j'ai trouvé un peu de temps pour tester la solution.

Donc ça marche, mais en partie seulement car :

1. si l'on accorde à un nouveau groupe (que nous appelerons "secretaire") que les droits d'édition des utilisateurs (et pas des groupes), la personne ne peut que créer des nouveaux utilisateurs qui ne seront inscrits que dans le groupe des utilisateurs enregistrés par défaut.

Je souhaiterai que le/la secrétaire puisse choisir le groupe dans lequel elle créé l'utilisateur (mais pas webmestre).

2. si l'on rajoute à ce groupe secrétaire les droits de gestion des groupes, à ce moment évidemment, elle peut créer un utilisateurs webmestre et prendre les droits ensuite en l'utilisant.

Donc ce hack est fonctionnel et je peux en partie l'utiliser mais cela n'est pas encore tout à fait ce que je recherchai.

Peut-être que la solution est dans la création d'un module.
Je ne sais pas.

En tout cas merci pour le boulot, je suis déjà bien avancé.

Posté le : 31/10/2007 21:56

Baronxoops d'accord, mais loin d'être le roi
Partager Twitter Partagez cette article sur GG+
Re: limiter les droits dans l'édition des utilisateurs
Guest_
Oki

Je ne savais pas que tu voulais éditer aussi des groupes

Mais ça dois être faisable ;)

Faut que tu trouve ou est généré le select ou le multi-select pour le choix des groupes et que tu ajoute cette condition

if ($_SESSION['xoopsUserGroups'][0] == "1")
{
.............
}
else
{
.............
}


Je sais pas si j'aurai le temps de regardé ça rapidement mais si personne ne trouve je chercherai :p


A+

PS : C'est marrant baron et garrath vous avez le même nombre de post

Posté le : 01/11/2007 00:02
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant
« 1 2 (3) 4 »



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

57 Personne(s) en ligne (42 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 57 | Plus ...