Je viens apporter mon grain de sel étant donné que Nico m'avait déjà consulté pour ce souci, j'avais télécharger les sources du tchat mais j'avais pas encore eu le temps de me pencher sur le souci et j'avais laissé de côté...
Je vois déjà un premier point qui pourrait être très vite réglé.
Sur le chat, il y a différents rôles : utilisateur, modérateur (apparaît en vert dans la liste), et admin (apparaît en rouge dans la liste)
Or il n'y a que deux rôles qui sont utilisés sur ce site, utilisateur et admin. En effet les modérateurs du forum semblent être automatiquement logués en tant qu'admin du tchat.
Alors que justement dans le code du tchat, la séparation des rôles, fait que normalement le modérateur n'a pas accès aux messages privés. J'ai fais un essai en local il n'y a pas accès.
Rétablir ce premier point à l'authentification réglerait déjà bien les soucis de droit.
Je pense que ça a été fait car de base les modérateurs n'avaient pas accès aux logs.
Mais cela se règle dans la configuration du chat. il faut passer cette variable à true :
Code : Tout sélectionner
// Defines if registered users (including moderators) have access to the logs (admins are always granted access):
$config['logsUserAccess'] = false;
Mais attention après vérification si on active ça tout le monde a accès aux logs public même les utilisateurs normaux.
Donc il faudrait modifier aussi cette fonction :
Code : Tout sélectionner
function hasAccessTo($view) {
switch($view) {
case 'chat':
case 'teaser':
if($this->isLoggedIn()) {
return true;
}
return false;
case 'logs':
if($this->isLoggedIn() && ($this->getUserRole() == AJAX_CHAT_ADMIN ||
($this->getConfig('logsUserAccess') &&
($this->getUserRole() == AJAX_CHAT_MODERATOR))
)) {
return true;
}
return false;
default:
return false;
}
}
J'ai supprimé la condition qui autorise le role AJAX_CHAT_USER
Ensuite sur le fait que l'administrateur (il doit y en avoir qu'un maintenant que les rôles sont bien séparés) ait le droit ou pas de regarder les logs du chat c'est un autre débat.
(Pour ma part ayant moi même développé un chat sur mon site, au cas où la justice me le demanderait, j'ai choisi de les archiver et je peux moi seul en tant qu'admin y avoir accès. Par contre tout ceci est bien précisé dans la charte d'inscription...)
Voilà, petit apparté fait, selon ce que sera décidé, voilà les solutions techniques pour empêcher l'administrateur de voir également les messages privés.
Il n'y a pas besoin de modifier la base pour savoir si un message est privé ou non.
Les messages privés sont identifiés par leurs numéro qui sont supérieurs aux variables définies dans le script de configuration
Code : Tout sélectionner
// UserID plus this value are private channels (this is also the max userID and max channelID):
$config['privateChannelDiff'] = 500000000;
// UserID plus this value are used for private messages:
$config['privateMessageDiff'] = 1000000000;
Il faut donc utiliser le système de purge et rajouter une condition dans la requête et purger uniquement les messages privés au bout d'un certain temps. Il faut laisser quelques minutes quand même le temps d'être sûr que le destinataire d'un message privé l'a bien reçu.
Du genre ceci dans la fonction purgeLogs() :
Code : Tout sélectionner
$sql = 'DELETE FROM
'.$this->getDataBaseTable('messages').'
WHERE
channel >= 1000000000 and dateTime < DATE_SUB(NOW(), interval '.$this->getConfig('logsPurgeTimeDiff').' DAY);';
J'ai rajouté cette condition dans la requête pour ne supprimer que les messages privés. numéro supérieur à celui spécifier dans la config. 1000000000 par défaut.
Et ce qui faudrait changer dans la config pour activer la purge :
Code : Tout sélectionner
// Defines if old messages are purged from the database:
$config['logsPurgeLogs'] = true;
// Max time difference in days for old messages before they are purged from the database:
$config['logsPurgeTimeDiff'] = 1;
Là c'est en jour mais suffirait de changer la requête et mettre MINUTE au lieu de DAY pour pouvoir spécifier ici un nombre de minutes.
Voilà le tout se paramètre quasi sans rien changer au code. Juste à la configuration du chat.