Identifier les utilisateurs dans plusieurs groupes en utilisant AND plutôt que OR ?OR ?OR ?OR ?

Il est facile d’utiliser des catégories et des sous-catégories pour permettre aux utilisateurs de les consulter selon une logique « OU » - c’est-à-dire si un utilisateur appartient au Groupe X ou au Groupe Y, il peut voir la catégorie ou la sous-catégorie.
Est-il possible d’utiliser efficacement la logique « ET », de sorte qu’un utilisateur doive appartenir à la fois au Groupe X ET au Groupe Y pour pouvoir voir une catégorie / sous-catégorie ?

Notre cas d’utilisation est que nous avons trois niveaux d’accès. Il est plus facile de les considérer comme des étudiants de 1ère année, des étudiants de 2ème année et des étudiants de 3ème année. La 1ère année ne peut voir que le contenu de la 1ère année, la 2ème année peut voir le contenu de la 1ère et de la 2ème année, la 3ème année peut voir tout le contenu. Cela fonctionne très bien.
Nous voulons ajouter une autre couche, en récompensant les utilisateurs du niveau de confiance 3 avec un accès anticipé à certains événements et ressources.
J’ai d’abord essayé de le faire en utilisant des événements non répertoriés dans les différents niveaux d’année, et en envoyant un lien vers ces événements aux utilisateurs du niveau de confiance 3, cependant toute personne ayant des notifications configurées pour surveiller la 1ère, la 2ème ou la 3ème année peut également voir instantanément ces événements, sans être limitée au niveau de confiance 3.
Une autre façon de procéder serait de créer une catégorie appelée « Récompenses Niveau de Confiance 3 », et d’avoir des sous-catégories pour la 1ère, la 2ème et la 3ème année, mais il n’est pas possible de restreindre les autorisations de cette manière ; puisque la 1ère, la 2ème et la 3ème année doivent avoir une visibilité sur la catégorie, encore une fois, tous les utilisateurs de ces groupes (quel que soit leur niveau de confiance) peuvent voir dans les sous-catégories.

Une manière très maladroite de le faire serait d’exporter les utilisateurs du niveau de confiance 3, puis d’exporter les utilisateurs (par exemple) de la 2ème année, de les fusionner dans Excel pour trouver les doublons, puis d’importer ces doublons dans un groupe appelé quelque chose comme « Niveau de Confiance 3 et 2ème année ». Cela fonctionnerait, mais cela demanderait beaucoup de travail manuel à chaque fois, et c’est une action que nous voulons effectuer régulièrement.

Des idées sur d’autres façons d’obtenir le même résultat ? Un plugin ou un script personnalisé pourrait-il au moins automatiser le processus d’exportation et d’importation ?

Merci d’avance.

2 « J'aime »

Créer un nouveau groupe qui contient les utilisateurs du groupe cible ayant le niveau de confiance 3 est la seule façon que je puisse imaginer pour y parvenir. Discourse ne dispose pas de règle ET qui puisse être utilisée avec les autorisations de sécurité de catégorie. Une question similaire s’est posée à quelques reprises concernant la création d’une règle de catégorie qui exclut les membres d’un ou plusieurs groupes.

Si le plugin Data Explorer est disponible sur votre site, vous pourriez utiliser une requête Data Explorer qui renvoie une liste de tous les utilisateurs du groupe cible ayant le niveau de confiance 3. Si vous n’avez pas affaire à un grand nombre d’utilisateurs, vous devriez pouvoir copier/coller les noms d’utilisateur renvoyés par la requête directement dans le formulaire Ajouter des utilisateurs d’un groupe. Discourse semble gérer l’ajout de noms d’utilisateur qui existent déjà dans un groupe dans ce formulaire, donc si vous exécutez la requête périodiquement, vous devriez pouvoir continuer à copier les noms d’utilisateur renvoyés dans le formulaire Ajouter des utilisateurs du groupe. Notez que je ne suis pas sûr du nombre maximum de noms d’utilisateur qui peuvent être collés dans le formulaire. Je viens de le tester avec 80 utilisateurs et cela fonctionne sans problème. De plus, si vous essayez de coller une liste de noms d’utilisateur exactement identique dans le formulaire Ajouter des utilisateurs, Discourse semble renvoyer une erreur. L’erreur peut cependant être ignorée.

Voici la requête que j’ai testée. Vous devez fournir le nom du groupe, par exemple ‘year_2’, avant d’exécuter la requête.

--[params]
-- string :group_name

SELECT u.username
FROM group_users gu
JOIN groups g ON g.id = gu.group_id
JOIN users u ON u.id = gu.user_id
WHERE g.name = :group_name
AND u.trust_level = 3

Il serait possible d’automatiser le processus ci-dessus en exécutant la requête Data Explorer via l’API, puis en utilisant les résultats de la requête API pour mettre à jour le groupe. Les détails à ce sujet se trouvent ici : Exécuter des requêtes Data Explorer avec l’API Discourse. Vous devriez ensuite mettre à jour les membres du groupe via l’API.

Il serait intéressant de pouvoir effectuer certains types d’actions directement sur les résultats d’une requête Data Explorer. Par exemple, avec une requête qui renvoie une liste de noms d’utilisateur, ajouter tous les utilisateurs à un groupe sans avoir à passer par l’étape de copier/coller.

4 « J'aime »

Merci !
Je n’ai pas encore utilisé Data Explorer, mais il figure sur ma liste de choses à explorer, et cela semble être un moyen plausible de faire ce que j’essaie de faire. Je vais y jeter un œil…
Merci également pour la requête.

2 « J'aime »

Salut @CC_people,
Je ne suis pas sûr que cela vous aide, mais juste au cas où :

3 « J'aime »

L’autre option serait un plugin personnalisé qui ajouterait l’utilisateur au groupe spécial lorsque les conditions seraient remplies.

2 « J'aime »

Juste pour vous faire un retour sur ce que nous avons fini par faire ici, au cas où cela serait utile à d’autres. En bref, nous exportons vers Excel, demandons à Excel de déterminer qui correspond à nos critères ‘ET’, puis ajoutons en masse ces utilisateurs à un groupe.
Nous avons demandé à notre assistant technique de se pencher sur un plugin personnalisé pour faire la même chose, mais il semble que cela s’avère un peu délicat, donc pour le moment, nous restons avec Excel.

Plus de détails :

  1. Exporter toute la base de données des utilisateurs.
  2. Importer dans Excel. Utiliser ISNUMBER et SEARCH pour extraire les utilisateurs d’un groupe spécifique dans la première feuille vers une deuxième feuille.
  3. Utiliser à nouveau ISNUMBER et SEARCH pour extraire les utilisateurs du deuxième groupe spécifique vers une troisième feuille.
  4. Ajouter en masse ces utilisateurs à leurs groupes appropriés.

J’imagine qu’il existe un moyen plus propre d’obtenir le même résultat, cependant, maintenant que c’est en place, il suffit de coller les données exportées à chaque fois, puis d’importer les résultats, sans avoir à y penser en cours de route.
Nous utilisons ce système pour récompenser les utilisateurs ‘réguliers’ tl3 avec des privilèges supplémentaires et un accès anticipé aux choses, et cela a l’effet désiré d’encourager une utilisation de meilleure qualité et en plus grande quantité. Donc, succès, bien qu’un peu maladroit et non automatisé. Nous avons notre fonction ‘ce groupe ET ce groupe’.

Vous pourriez utiliser le nouveau script d’automatisation « Adhésion au groupe d’utilisateurs via un badge » pour peut-être relier cela ? Surtout si vous avez activé les badges déclenchés personnalisés.

1 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.