Séparer « supprimer tous les messages et sujets autorisés aux groupes » en permissions de contenu personnel et de contenu global

Je souhaiterais suggérer de scinder le paramètre « groupes autorisés à supprimer tous les messages et sujets » en permissions plus ciblées.

Actuellement, ce paramètre est large : il autorise les groupes sélectionnés à supprimer les messages et sujets créés par d’autres utilisateurs, ainsi qu’à voir les messages/sujets supprimés. Cela a du sens pour les modérateurs ou les groupes de modération de confiance, mais c’est trop puissant pour un cas d’usage où je souhaite simplement que les utilisateurs aient un contrôle accru sur leur propre contenu.

Pour préciser, je ne parle pas de suppression définitive/suppression physique depuis la base de données.

Je m’intéresse principalement au comportement habituel de suppression/modification visible par les utilisateurs : par exemple, lorsqu’un utilisateur supprime son propre message, cela laisse-t-il le marqueur habituel de message supprimé, le contenu des anciennes modifications reste-t-il accessible via l’interface d’historique des révisions, et pourrait-il exister une permission plus ciblée pour gérer cela uniquement sur les propres messages d’un utilisateur ?

Une séparation possible pourrait être :

  1. groupes autorisés à supprimer leurs propres messages et sujets
  2. groupes autorisés à supprimer tous les messages et sujets

Le premier paramètre s’appliquerait uniquement au contenu rédigé par l’utilisateur actuel. Le second conserverait le comportement actuel plus large pour les groupes de confiance autorisés à supprimer le contenu d’autres utilisateurs et à voir le contenu supprimé.

Cela faciliterait l’application du principe de moindre privilège dans la conception des rôles. Par exemple, un site pourrait souhaiter que les utilisateurs de niveau TL4/Leader, ou un groupe de confiance personnalisé, aient plus de contrôle sur la suppression de leurs propres messages/sujets, sans pour autant leur accorder un pouvoir de modération sur le contenu des autres utilisateurs.

Je suis conscient qu’il faudrait mettre en place des garde-fous, notamment lorsque la suppression du premier message affecte un sujet contenant des réponses d’autres utilisateurs. Dans ces cas, Discourse pourrait maintenir la restriction actuelle, exiger l’intervention d’un modérateur, ou limiter la permission de contenu propre aux réponses/sujets sans réponses.

La demande principale est d’obtenir une permission de suppression/historique des révisions pour le contenu propre, distincte de la permission globale de suppression actuelle, afin que les administrateurs n’aient pas à choisir entre la suppression douce habituelle pour les utilisateurs ordinaires et une permission beaucoup plus large du type « peut supprimer les messages/sujets d’autres utilisateurs ».

Je pense qu’une partie de la confusion vient du fait qu’il pourrait y avoir une distinction entre différentes vérifications « voir le contenu supprimé ».

En examinant PostGuardian, il semble qu’un post individuel supprimé ne devienne pas visible via can_see_post? simplement parce que l’utilisateur appartient à delete_all_posts_and_topics_allowed_groups.

Par exemple, la visibilité d’un post individuel supprimé semble passer par :

def can_see_deleted_post?(post)
  return false if !post.trashed?
  return false if @user.anonymous?
  return true if is_staff?
  post.deleted_by_id == @user.id && @user.has_trust_level?(TrustLevel[4])
end

Ainsi, un utilisateur non-staff de niveau de confiance 2 appartenant à delete_all_posts_and_topics_allowed_groups ne serait pas nécessairement en mesure d’ouvrir ou de lire le corps de chaque post supprimé via can_see_post?.

Cependant, le même paramètre est également utilisé ici :

def can_see_deleted_posts?(category = nil)
  is_category_group_moderator?(category) ||
    @user.in_any_groups?(SiteSetting.delete_all_posts_and_topics_allowed_groups_map)
end

Cela signifie que le paramètre reste conceptuellement plus large que simplement « l’auteur peut retirer son propre contenu ». Il semble être utilisé à la fois pour supprimer les posts visibles d’autres utilisateurs et pour certaines affordances de visibilité ou de liste des posts supprimés.

Ma préoccupation est donc moins que « ce paramètre expose définitivement le corps de chaque post supprimé dans chaque point de terminaison », et plus que la permission actuelle combine plusieurs concepts :

  1. la suppression des posts/sujets d’autres utilisateurs ;
  2. la visualisation ou la liste des posts/sujets supprimés dans certains contextes ;
  3. l’octroi aux auteurs d’un meilleur contrôle sur leur propre empreinte.

Pour mon cas d’usage, je ne souhaiterais que le troisième point.

C’est pourquoi je pense qu’un paramètre dédié au contenu personnel serait plus clair. Il permettrait à un utilisateur de supprimer ou de retirer ses propres posts/sujets, sous réserve des garde-fous existants, sans accorder de permissions plus larges de type modération sur le contenu d’autres utilisateurs ou sur la visibilité du contenu supprimé.

Pour clarifier le comportement de l’interface utilisateur, voici ce que je souhaite : je ne demande pas que le contenu supprimé devienne visible pour les utilisateurs ordinaires.

Pour une permission de suppression de son propre contenu, le comportement idéal serait sensible au contexte de l’utilisateur :

  • l’auteur peut voir que son propre message a été retiré/supprimé, peut-être avec le style habituel des messages supprimés en rouge ou dans un état replié, afin qu’il comprenne ce qui s’est passé et puisse le récupérer si la récupération est autorisée ;
  • le personnel et les modérateurs conservent toute la visibilité d’audit et de modération appropriée ;
  • les utilisateurs ordinaires ne doivent voir aucune trace du contenu supprimé : ni le corps du message, ni l’historique des révisions, et idéalement aucun indicateur de message supprimé.

La distinction que je demande est donc le contrôle de l’auteur sur sa propre empreinte visible, sans accorder aux utilisateurs non membres du personnel la visibilité sur le contenu supprimé ni un pouvoir global sur les messages ou sujets des autres utilisateurs.

Une nuance supplémentaire réside dans l’historique des révisions.

En examinant PostRevisor, on constate que l’historique des modifications est stocké séparément via PostRevision. Je ne suggère donc pas qu’une permission de suppression de contenu propre doive nécessairement effacer définitivement les enregistrements de révision ou supprimer l’auditabilité.

La permission que j’envisage concerne davantage la visibilité destinée aux utilisateurs ordinaires : l’auteur peut-il retirer son propre message/sujet ? Le message de remplacement d’un message supprimé reste-t-il visible ? Les utilisateurs ordinaires peuvent-ils consulter le contenu des anciennes éditions ? Et le personnel ou les modérateurs conservent-ils l’accès d’audit ou de modération approprié (par exemple via l’option « VOIR N RÉPONSES CACHÉES ») ?

La distinction que je propose n’est donc pas :

  • « permettre aux utilisateurs d’effacer toutes les traces de la base de données »

mais plutôt :

  • « permettre aux utilisateurs d’avoir plus de contrôle sur leur propre contenu visible/empreinte »
  • sans pour autant leur accorder des pouvoirs globaux leur permettant de supprimer le contenu d’autres utilisateurs ou de consulter généralement le contenu supprimé.