Création de wiki ... Quelques questions.[Array Filter PHP] - Divers - Programmation
Marsh Posté le 15-06-2006 à 12:26:46
Merci d'avoir rép :-)
Dans dokuwiki le problème est que lorsque je me connecte, il arrive sur la page index ou il y a une liste de tout les client.
La gestion des droit ne permettent pas d'acceder a leur projets, mais bon, la liste des client ca l'fais pas quoi...
Dans mediawiki: C'est plutot concu pour faire une encyclopédie (pas pour rien que c'est utilisé par wikipédia vous allez m'dire !) donc vraiment pas approprié.
En faite je cherche un wiki qui : Lorsque je me connecte, en fonction du pseudo avec lequel je suis loggé, JE VOIS tel ou tel page. Et que je NE VOIS pas les pages auxquel mon profil n'est pas associé.
C'été ca le problème sous dokuwiki : je voyais les pages meme si je n'y avais pas accès. Et aller modifier le code source d'une uzinagaz comme celui la...
Marsh Posté le 15-06-2006 à 12:30:03
Solution pas propre, installer plusieurs wiki dans des sous domaines par exemple protégés par des htaccess ou une petite modif au niveau des sessions.
Marsh Posté le 15-06-2006 à 12:38:38
stagiux a écrit : Et aller modifier le code source d'une uzinagaz comme celui la... |
N'a rien de très difficile si on a un peu de temps.
Je ne le connais pas perso mais pour ce que tu demandes, il suffit de mettre une redirection selon l'id de l'utilisateur (pas super propre, mais c'est vite fait)
Marsh Posté le 15-06-2006 à 13:46:53
2xyo a écrit : Solution pas propre, installer plusieurs wiki dans des sous domaines par exemple protégés par des htaccess |
Justement j'y avais pensé... mais non ca n'irait pas, car l'admin des travaux de l'entreprise X aura à se connecter a N wiki différents... c'est un peu chiant pour lui, faudrai une soluce completement transparente...
2xyo a écrit : ou une petite modif au niveau des sessions. |
Master p a écrit : N'a rien de très difficile si on a un peu de temps. |
J'y avais pensé. j'ai fouillé dans les sources et je n'ai vu nul part des "session start", juste des include par demi douzaine qui eux meme necessite d'autre fichiers...
J'peut t'envoyer les sources deja configuré si ca t'interesse d'y jeter un pti coup d'oeil.
Ca n'existe pas des wikis avec gestion d'accès/visibilité a certaine page ?
Marsh Posté le 15-06-2006 à 14:11:04
Code :
|
C'est pas des connaissances qu'il te manque, c'est de la volonté
Le code est propre et plutot bien construit, je me répète, ça a pas l'air dur
Marsh Posté le 15-06-2006 à 14:27:33
ok-ok, reprenons donc les sources...
J'ai vu que le fichier de conf été dokuwiki.php.
dans celui ci, on peut trouver $conf['savedir'] = './data/';
que j'ai tenter de remplacer par $conf['savedir'] = './data/'.$user;
$user je l'ai trouver dans le fichier appelé par doku.php qui s'appel auth.php
cela semblre etre la variable qui contient le nom de l'user.
Plus rien n'a fonctionné.
Les authentification de marchais plus du tout.
Marsh Posté le 15-06-2006 à 14:48:47
S'il y a possibilité de faire des catégories différentes, fais une catégorie pour chaque user, et force cette catégorie lors de l'authentification. Bien sûr, je te dis ça sans avoir tester et je ne garantis pas le résultat.
Sinon, tu cherches sur google (un peu comme ça et tu cliques sur le 2ème lien )
Marsh Posté le 15-06-2006 à 15:06:14
vais mettre en ligne le truc pour que tu vois ce qui cloche...
Marsh Posté le 15-06-2006 à 15:19:43
http://extranetr2d4.ovh.org/dokuwiki2/doku.php
Voila.
Connect toi en tant que client/client tu aura accès au repertoire 530 et son contenu et pas a 531
Connect toi en tant que client2/client2 tu aura accès au repertoire 531 et son contenu et pas a 530
Voila. C'est exactement ca qu'il me faut. sauf que je ne veux pas voir "531" quand je suis connecté en tant que client et 530 quans je suis connecté en tant que client2...
EDIT : MP moi si tu veut le pass admin pour voir comment j'ai géré les accès
Marsh Posté le 15-06-2006 à 15:56:21
Je peux pas tester en local, donc je ne peux pas vérifier ce que je vais te dire.
L'index est construit dans le fichier inc/html.php:html_index.php. Tu peux donc éliminer à cet endroit-là le contenu de l'arborescence n'appartenant pas à ton user.
Comment ? en créant des catégories au nom des utilisateurs (ou groupe d'utilisateur) et ne gardant que celui-ci dans le contenu du tableau $data (l. 587)
Marsh Posté le 15-06-2006 à 16:20:05
Code :
|
OMG...
Les categories sont déja crée.
Client fait partie du groupe d'user "clientA" et Client2 fait partie du goupe d'user "ClientB"
pourquoi le tableau $data est reinitialisé ?
Marsh Posté le 15-06-2006 à 18:15:21
Wikini fait pas ce que tu veux ? cf http://www.wikini.net/wakka.php?wiki=AccessControl
(pas que je m'ennuie, mais finalement, je crois que je vais travailler)
Marsh Posté le 16-06-2006 à 09:16:44
Master p a écrit : Wikini fait pas ce que tu veux ? cf http://www.wikini.net/wakka.php?wiki=AccessControl |
Non j'ai testé...de plus il est mal concu je trouve... utilisation peu intuitive.
Merci du coup de main MasterP sans toi mon topic aurait pas beaucoup de succès!
Marsh Posté le 16-06-2006 à 09:42:58
stagiux a écrit :
|
Peux-tu me faire un `print_r($data);` juste après la ligne 17 et m'indiquer son résultat ?
Marsh Posté le 16-06-2006 à 09:48:53
Voici un index de toutes les pages disponibles, triées par catégorie.
Array ( [0] => Array ( [id] => 0530 [type] => d [level] => 1 [open] => ) [1] => Array ( [id] => 0531 [type] => d [level] => 1 [open] => ) [2] => Array ( [id] => inutile [type] => d [level] => 1 [open] => ) [3] => Array ( [id] => wiki_r2d4 [type] => f [level] => 1 [open] => 1 ) )
*
0530
*
0531
*
inutile
*
wiki_r2d4
Marsh Posté le 16-06-2006 à 09:52:41
Résumons, tu veux qu'un user ClientA puisse avoir visibilité seulement sur le dossier `ClientA`, mais qu'un user Admin puisse avoir visibilité sur l'ensemble des dossiers. Ce que je te propose n'est pas propre et pas vérifié, mais c'est en gros ce que j'aurais fait :
Code :
|
En remplacement de la ligne 18
Code :
|
Hors de la fonction html_index()
Je répète que je n'ai pas les moyens de tester en live, donc si ça ne fonctionne pas, ça ne doit pas en être loin mais je te laisse t'occuper du débuggage. Pour comprendre : http://fr3.php.net/manual/fr/function.array-filter.php
Marsh Posté le 16-06-2006 à 10:02:41
oui voila.
Le client A (qui est dans la catégorie d'user "ClientA" ) voit la dossier 530 mais pas le dossier 531.
Le client B(qui est dans la catégorie d'user "ClientB" ) voit le dossier 531 mais pas le dossier 530.
L'admin (qui est dans la catégorie d'user "Admin" ) voit Tout.
Marsh Posté le 16-06-2006 à 10:07:46
cf edit
Ce que j'ai fait nécéssite d'avoir des noms de dossiers identiques aux noms d'user (ou sinon, tu peux te baser sur les catégories).
Maintenant, faut vérifier que l'accès direct via l'url n'est pas possible.
Marsh Posté le 16-06-2006 à 10:41:28
merci...
Maintenant je cherche dans quel variable est stocké l'user... car quand je fais echo $user; il répond rien...
ARRRRRFFFFFF !
Marsh Posté le 16-06-2006 à 11:08:40
$_SESSION[$conf['title']]['auth']['user']
C'était la dedand !
pfiou ! fallait le trouver !
vais continuer sur ce que tu m'a dis...
Marsh Posté le 16-06-2006 à 15:17:23
Bon : Voila ou j'en suis...
J'ai modifier le code comme tu me l'a indiquer de sorte que :
Code :
|
Code :
|
Me problème se situe a un niveau assez particulier...
Lorsque j'utilise l'index creer par Data2, les repertoire ne sont plus browsable. je ne peut plus acceder au contenu d'aucun repertoire, ca fais comme si j'avais pas les droit. (connectes toi sur le wiki que j'ai mis en ligne en tant que client/client et essaie de voir le repertoire 531. ca me fais exactement pareil sur tout les dossiers.)
Mais ca c'est secondaire, ca doit etre une histoire de droit je verrai ca après.
Pour l'instant ma préoccupation : La fonction tri_index.
Tu m'as dis de marquer return($array['id'] != $users && $array['level'] == 1);
J'ai rajouté au dessus de cette ligne " $users=$_SESSION[$conf['title']]['auth']['user'];"
Mais quand je fais echo "l'user est $users";
il me répond "l'user est l'user est l'user est l'user est l'user est l'user est l'user est l'user est l'user est "
POURQUOI LA VARIABLE DE SESSION NE FONCTIONNE PAS ALORS QU'ELLE MARCHE 3 LIGNES PLUS HAUT ????????????????????????? (oui j'me suis arraché quelque cheveux depuis hier... bon d'accord j'arreterais )
Marsh Posté le 16-06-2006 à 15:40:54
1/ Fais un print_r($_SESSION) pour en voir son contenu
2/ gaffe, dans le return, de remplacer le $user par $users
En fait, cette modification va éliminer les répertoires de niveau qui n'ont pas le nom de l'utilisateur, il faut donc faire des répertoires au nom des utilisateurs (ou des catégories si t'adaptes la modif). Maintenant, à toi de trouver la variable user, ça doit pas être bien sorcier
Marsh Posté le 16-06-2006 à 15:58:58
Ce que je comprend pas, la variable user je l'ai trouvé !!!! elle est dedand : $_SESSION[$conf['title']]['auth']['user']
mais c'est comme si elle était vide quand elle rentrais dans la fonction tri_index
EDIT : quand je fais echo $_SESSION[$conf['title']]['auth']['user'] ; dans la fonction html_index, il sait me dire qui c'est.
par contre le meme echo dans une autre fonction de la meme page et la il est perdu ??
et quand je fais print_r (^$_session); il me sort le meme resultat que si je le fesais dans la fonction html_index...
Marsh Posté le 16-06-2006 à 16:38:35
C'est bon. en faite, j'avais pas declarer dans la fonction tri_index la variable global $conf....
Ce problème la est résolu :-)
Marsh Posté le 19-06-2006 à 10:50:31
Bon, suite et j'espere fin de mes problème...
Je ne trouve pas la solution pour executer l'array filter sur un tableau multidimensionel.
Pourquoi j'ai besoin de ca :
Tout d'abord voici ma source (d'ennui ? lol):
Code :
|
Le problème :
Voici ce que me donne ce page en étant loggé en NON-Admin :
Citation : Voici un index de toutes les pages disponibles, triées par catégorie. |
La fonction tri index devrait faire en sorte que l'index n'affiche que "Client" car je suis loggé en "Client".
Et d'après Array filter n'accomplit pas sa tache en tableau multidimensionel...
Marsh Posté le 19-06-2006 à 14:56:51
fait un `print $user` dans le tri_index(). Pas de raison que ça marche pas
De plus, en l. 46
Code :
|
Marsh Posté le 19-06-2006 à 15:55:59
J'ai trouvé la solution en comparant les var dump des $data en entrée et en sortie de tri index...
en faite, cette fonction necessitais que le Repertoire ET le nom du fichier se trouvant a l'interieur soit identique. ce qui ne permettais pas de gerer plusieurs projet.
La solution, je viens de la pondre, est de rajouter $array['level']>'1'; dans le return.
Comme il n'est pas possible que les fichiers de l'autre client se mette en level 2 (car pas affiché, cqfd)....
pas d'autre soluces plus intelligente pour mon cerveau !
Marsh Posté le 19-06-2006 à 18:40:08
Mouais, un détail que j'ai oublié par la suite
Marsh Posté le 15-06-2006 à 12:02:10
Bonjour.
Je voudrais creer un wiki qui répond a plusieurs contraintes et je n'ai pas trouvé mon bonheur.
Exemple d'utilisation du wiki :
Une entreprise X a 2 clients que nous nommerons A et B.
Pour le client A, il y a 1 projet.
L'entreprise et le client communique, collabore sur le projet par cette interface. Il ajoute des modif etc...
Pour le client B, pareil.
Le client A ne doit pas voir ce qui se passe pour le client B, lorsqu'il se connecte il voit directement la liste de Ses projet.
J'ai testé dokuwiki et mediawiki...
Sans succès.
Avez vous des idées ou des conseils?
Message édité par stagiux le 19-06-2006 à 11:34:51