Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Bonjour.
J'ai installé un forum punBB sur mon site, et j'aimerai y développer en parallèles d'autres pages.
I - J'aimerai que ces pages ne soient accessibles que pour les membres d'un groupe :
par exemple, si un invité clique sur le lien, un message lui indique qu'il n'a pas accès aux données, si un membre du groupe clique, la page s'affiche.
Quels codes dois-je ajouter sur mes pages ? A quels emplacements ?
II - J'aimerai aussi que certains liens ne s'affichent que pour les membres de certains groupes. Par exemple : le lien qui mène à une page "exemple.php" n'est affiché que si le visiteur est membre du groupe X ayant la possibilité de le voir.
Je vous remercie de votre aide pour un néophyte comme moi 
Hors ligne
De memoire je dirais un test if sur $pun_user['g_id'].
Je pense que les id des groupes sont dans cette variable. Au dernieres nouvelles, le groupe admin avait g_id < 4 je crois. Je vais reverifier mais de votre coté essayez aussi de faire quelques petits tests sur la-dite variable (en creant des groupes)
L'idée serait qu'au tout debut de la page dont vous souhaiteriez que l'acces soit reistreint, il y ait un
if ($pun_user['g_id'] > /* l'id du groupe que tu veux */) {
echo "Vous n'avez pas la permission de voir cette page";
}
else {
/* On poursuit avec le contenu normal de la page */
}Dernière modification par Apophis (19-02-2008 18:05:32)
Join us now and share the software, Hackers you'll be FREE!
Hors ligne
Merci bien, j'ai testé deux trucs :
<?php
if ($pun_users['group_id'] > 1) {
echo "Vous n'avez pas la permission de voir cette page";
}
else {
/* On poursuit avec le contenu normal de la page */
}
?>
/* code source de la page */et
<?php
if ($pun_groups['g_id'] > 1) {
echo "Vous n'avez pas la permission de voir cette page";
}
else {
/* On poursuit avec le contenu normal de la page */
}
?>
/* code source de la page */Aucuns des deux ne fonctionne... Je sais bien qu'il y a une erreur, mais étant donné mes connaissances en php (qui se résument à savoir lire), je ne sais que faire...
Hors ligne
Voilà ce que je mettrait :
if ($pun_user['g.id'] > ton_id_de_groupe )
message('Vous n\'avez pas l\'autorisation de consulter cette page !');M@x.
...
Hors ligne
Je viens d'essayer et ça ne fonctionne pas... Je commence à désespérer de mon incapacité.
Pour info : les noms employés par ma base de donnée sont "pun_users" et "group_id"
(J'ai eu beau adapter, ça ne restreint absolument pas les accès...)
Pourriez-vous faire une page type avec le code inséré ? (en faisant figurer sur le code, /* le code source de la page */ afin que je puisse insérer directement mon code source et vérifier si cela fonctionne).
Je vous remercie.
Dernière modification par Awnorus (19-02-2008 19:46:27)
Hors ligne
Hop là je viens de vérifier, c'est bien $pun_user['g_id'] mais il semble que tu ais besoin de include/common.php.
Par conséquent, pour que les moderateurs et les admins puissent accéder à la page, et pour reistreindre l'acces aux autres membres n'etant pas du groupe que tu veux:
require PUN_ROOT.'include/common.php';
if ( ($pun_user['g_id'] < PUN_GUEST) || ($pun_user['g_id'] == id_du_groupe)) {
/* contenu normal de la page */
}
else {
message('Vous n\'avez pas l\'autorisation de consulter cette page !');
}C'est un peu bourrin, mais l'idée y est 
EDIT: ne pas oublier de definir la racine de ton forum avant le require
i.e define('PUN_ROOT', 'chemin vers la racine de tes forums');
Dernière modification par Apophis (19-02-2008 20:10:41)
Join us now and share the software, Hackers you'll be FREE!
Hors ligne
J'ai testé...
<?php
define('PUN_ROOT', 'forum/');
require PUN_ROOT.'forum/include/common.php';
if ( ($pun_users['group_id'] < PUN_GUEST) || ($pun_users['group_id'] == 1)) {
Affichage de la page.
} else {
message('Vous n\'avez pas l\'autorisation de consulter cette page !');
}
?>Et j'ai le droit à ceci :
Parse error: syntax error, unexpected T_STRING in /home.39/a/l/i/alidhana/www/test.php on line 6
D'où vient le problème ?
Hors ligne
$pun_userM@x.
...
Hors ligne
"Affichage de la page." est du texte brut au milieu du code PHP cela produit une parse_error ; normal 
il faut mettre par exemple
echo "Affichage de la page.";ou
?>
Affichage de la page.
<?phpHors ligne
Ah oui aussi 
Voici un code propre, à la PunBB !
<?php
define('PUN_ROOT', 'forum/');
require PUN_ROOT.'include/common.php';
if ($pun_user['group_id'] == PUN_GUEST)
message('Vous n\'avez pas l\'autorisation de consulter cette page !');
?>
ET la tout le reste de ta page pour les invités.Dans ce cas, les invités ne peuvent pas visiter la page.
Voici sinon, les groupes principales (Dans include/common.php)
define('PUN_ADMIN', 1);
define('PUN_MOD', 2);
define('PUN_GUEST', 3);
define('PUN_MEMBER', 4);
M@x.
...
Hors ligne
En plus des deux erreures precédentes, vous avez faits plein de petites erreures aussi. Je vais essayé de corriger pour que vous comprenniez un peu mieux. Voici un exemple de bon code:
<?php
define('PUN_ROOT', 'forum/');
require PUN_ROOT.'include/common.php';
if ( ($pun_user['g_id'] < PUN_GUEST) || ($pun_user['g_id'] == /* id_du_groupe_autorisé */)) {
message("Vous êtes autorisé à consulter le contenu de cette page. Bravo");
}
else {
message('Vous n\'avez pas l\'autorisation de consulter cette page !');
}
?>Voila donc je repete encore une dernière fois pour que vous comprenniez: il faut que dans ce code, vous remplaciez /* id_du_groupe_autorisé */ par l'id du groupe que vous autorisez à consulter cette page.
Si vous ne connaissez pas cet id, c'est tres simple:
- le groupe admin ont l'id 1 par defaut je crois,
- le groupe moderateurs c'est l'id 2
- groupe invité, c'est l'id 3
- groupe membres, c'est l'id 4
- pour les autres groupes (donc ceux que vous allez creer ulterieurement), ils ont tous des id superieurs à 4. Le premier groupe que vous allez creer aura l'id 5, le second aura l'id 6 ...
D'ailleurs si vous allez dans Administration -> Groupes , les groupes d'utilisateurs sont classés (vers le bas de la page) de haut en bas par leur id (voila, comme ca je pense que c'est plus facile à comprendre).
EDIT: oups désolé j'ai été devancé de quelque peu par M@x. Mais je laisse car ca peut servir
EDIT bis: juste comme ça (pour ma propre culture de punbb) comment se fait-il que $pun_user['g_id'] et $pun_user['group_id'] soient pareils?
Dernière modification par Apophis (20-02-2008 16:36:36)
Join us now and share the software, Hackers you'll be FREE!
Hors ligne
En plus des deux erreures precédentes, vous avez faits plein de petites erreures aussi. Je vais essayé de corriger pour que vous comprenniez un peu mieux. Voici un exemple de bon code:
Mon code fonctionne parfaitement !
Si on regarde dans la table user, on ne trouve pas de g_id donc ça m'étonnerai que ça fonctionne !
De plus votre méthode concernant le if et le else n'est pas vraiment adopté par PunBB, elle ne sert à rien ! Un if bien "réfléchit" est appréciable.
M@x.
...
Hors ligne
$pun_user n'est pas la table users
Ce qui est dans $pun_user est la table users ET la table groups (+ 2 champs de online)
d'où le g_id (de groups) et le group_id (de users) équivalents
ça se passe dans la fonction check_cookie dans functions.php
Bouh !
StarShip Renaissance
Hors ligne
$pun_user n'est pas la table users
Ce qui est dans $pun_user est la table users ET
Donc ça l'est quand même 
M@x.
...
Hors ligne
Désolé je ne parlais pas de vous M@x mais plutot de celui qui a posé le problème. En plus de l'erreur que vous avez trouvé et de celle que vin100 a trouvé, il avait fait pleins de petites erreures en plus aussi.
Sinon merci pour les renseignements sur $pun_user. J'avais dejà jeté un coup d'oeil sur la requette dans functions.php mais je n'avais pas tout saisi. Et donc ça confirme que $pun_user['g_id'] et $pun_user['group_id'] soient équivalents. Merci
Join us now and share the software, Hackers you'll be FREE!
Hors ligne
Bonjour.
Le code fonctionne impeccablement 
Mais, si je souhaite rediriger les invites vers une autre page, qu'est-ce que je peux mettre à la place de
if ($pun_user['group_id'] == PUN_GUEST)
message('Vous n\'avez pas l\'autorisation de consulter cette page !');
?>Merci, vos réponses sont très enrichissantes.
Hors ligne
Essayez avec
header(location: /* url de la page ou vous voulez les rediriger */ );Pas sur que ça fonctionne mais essayez quand même 
Dernière modification par Apophis (22-02-2008 18:28:07)
Join us now and share the software, Hackers you'll be FREE!
Hors ligne
Apophis, PunBB tu connait ?! 
Voici le code idéale :
if ($pun_user['group_id'] == PUN_GUEST)
redirect('tapage.php', 'Vous n'avez pas l\'autorisation d\'accèder à cette page !');M@x.
...
Hors ligne
Sorry M@x j'en connais beaucoup moins que vous (seulement trois mois d'"addiction"
)
Join us now and share the software, Hackers you'll be FREE!
Hors ligne
Pas de soucis, maintenant tu connait cette fonction 
M@x.
...
Hors ligne
Bonjour.
Ca fonctionne parfaitement, les non-connectés sont redirigés vers la page de mon choix.
Néanmoins, j'aimerai que vous m'éclairiez sur deux petits points :
- Avec le code actuel, je redirige les invités, mais je voudrais plutôt n'accepter qu'un seul groupe ; soit, rediriger tout le monde sauf un seul groupe. Que puis-je faire ?
- J'ai un petit message d'erreur qui dure deux secondes lorsque je tente d'ouvrir la page sans être connecté :
Warning: Missing argument 2 for redirect() in /home.39[...]www/forum/include/functions.php on ligne 876
[large]Redirection[/large]
Cliquer ici si vous ne voulez pas attendre (ou si votre navigateur ne vous redirige pas).
Dernière modification par Awnorus (25-02-2008 17:44:17)
Hors ligne
Voici comment fonctionne la fonction redirect() :
redirect('page_de_redirection.php', 'Message de redirection');Dans ta page, tu n'as pas mis le message de redirection 
Dernière modification par Herbivor (25-02-2008 17:50:22)
Hors ligne
Très bien, merci ; je comprends mieux maintenant...
N'est-il pas possible de changer le style de la page qui affiche le message de redirection ? Actuellement, la police est noire sur fond blanc.
Dernière modification par Awnorus (25-02-2008 17:53:57)
Hors ligne
N'est-il pas possible de changer le style de la page qui affiche le message de redirection ?
Oui, dans include/template/redirect.tpl.
Hors ligne