Usuarios que han accedido a un tema en una categoría protegida

Necesitaría algo de ayuda. No tengo ni idea de SQL.

Soy administrador de un foro para mi sindicato. Soy un representante electo, pero no estoy en la dirección. La razón por la que administro el foro es porque ya tengo experiencia con Discourse; lo configuré para modernizar nuestra comunicación interna (colaboración en equipo), y de momento soy el único (de entre 20 personas) que realmente sabe hacer algo más avanzado en el ámbito tecnológico “tras bambalinas”, más allá de usar un constructor web para crear un sitio web. El punto es que nuestro grupo tiene conocimientos tecnológicos como usuarios finales, pero no “tras bambalinas”.

Dado que este es un espacio de trabajo para todos nosotros, incluida la dirección, he configurado varias categorías para que trabajen en ellas, en las que no debería poder espiar. (Digamos que está por encima de mi categoría).

Como no hay una forma real de ocultar contenido a un administrador, he creado un componente de tema con CSS para:

  • Ocultar los botones de mensajes en los perfiles de usuario.
  • Ocultar el botón de suplantación de identidad en los perfiles de administrador.
  • Ocultar la vista previa de los temas de las categorías en la página de categorías.
  • Ocultar la lista de temas dentro de las categorías a todos.
    • Luego, añadir visibilidad a las listas de temas para los miembros de un grupo (principal).

En resumen, estoy creando una serie de registros y trazas de auditoría que estarán disponibles por si desean verificar que no estoy espiando.

  1. Pueden mirar en los registros del sitio si alguna vez toco ese componente de tema (editarlo/desactivarlo) sin que ellos lo sepan; pueden preguntar por qué y ver los detalles.
  2. Si alguna vez uso la función de suplantación de identidad o ver mensajes, eso también aparecerá en los registros.

Básicamente, si alguna vez altero el CSS que escribí para ocultar esto, ellos podrán verlo y pedirme que me explique.

  1. Si me agregara a su grupo para que el contenido sea visible para mí, en los registros del grupo se mostraría mi adición/eliminación de mí mismo. Pueden pedirme que me explique.

Lo que necesito ayuda:
Si alguna vez veo la página con las hojas de estilo CSS desactivadas, puedo ver las URLs de los temas. Luego, obviamente, puedo abrir los temas directamente. Lo que quiero es una consulta del Explorador de Datos que ellos (el equipo ejecutivo, que todos tienen acceso de administrador) puedan ejecutar de vez en cuando y que muestre los temas visualizados dentro de una categoría por cualquier usuario que no sea miembro del grupo “ejecutivo”.
No tienen ni idea de que esto se puede hacer, pero quiero cubrir todas las bases. Quiero hacer esto a prueba de futuro más allá de mí. Lo mejor que puedo con las herramientas disponibles.

Así que, de nuevo, necesito una consulta del Explorador de Datos para:

  1. Si el usuario no es parte del grupo “ejecutivo”
  2. Entonces mostrar los temas visualizados por el/los usuario(s) en la categoría “EB” (o id de categoría: 34)

Esto, combinado con el “blanco” CSS que he aplicado, crea suficiente rastro documental que indica que si alguien (yo o cualquier persona que no esté en el equipo ejecutivo y que pueda recibir acceso de administrador en el futuro) ha visto temas dentro de esa categoría y no es parte del equipo ejecutivo, realmente ha tenido que esforzarse y es una intromisión intencional.

¿Puede alguien ayudarme con esto?

Creo que deberías abrir un nuevo tema sobre esto…

Pero, puedes intentarlo (y aprender SQL) :wink:

Punto 1:

-- [params]
-- string :gname = executive
-- string :uname = SidV
SELECT u.username, g.id as "group id", g.name
FROM group_users gu, users u, groups g
WHERE g.id = gu.group_id
AND u.id = gu.user_id
AND g.name ILIKE :gname
AND u.username ILIKE :uname

Punto 2

No entiendo tu punto… ¿qué necesitas?

Consulta la lista de consultas e intenta adaptar alguna consulta para tu necesidad.

3 Me gusta

Básicamente, escriba una consulta para mostrar cualquier tema leído en la categoría 1 o 2 por cualquier usuario no asignado al grupo A.

Usuarios que han accedido a un tema en una categoría protegida

Esta consulta devolverá todos los topic_users (usuarios que han visto o publicado en un tema) que no son miembros del grupo especificado en el parámetro :group_name de la consulta, para temas en categorías que tienen ese grupo en sus configuraciones de seguridad. Esto puede utilizarse para encontrar administradores que han visto un tema en una categoría a la que se le han agregado permisos de grupo.

--[params]
-- string :group_name

WITH allowed_users AS (
SELECT user_id
FROM group_users gu
JOIN groups g
ON g.id = gu.group_id
WHERE g.name = :group_name
),
group_categories AS (
SELECT category_id
FROM category_groups cg
JOIN groups g
ON g.id = cg.group_id
WHERE g.name = :group_name
)

SELECT
tu.user_id,
tu.topic_id,
tu.last_visited_at::date
FROM topic_users tu
JOIN topics t
ON t.id = tu.topic_id
WHERE t.category_id IN (SELECT category_id FROM group_categories)
AND tu.user_id NOT IN (SELECT user_id FROM allowed_users)
ORDER BY t.category_id
4 Me gusta