Estoy desarrollando un plugin que añadirá un valor booleano basado en cierta lógica personalizada a la tabla user_custom_fields para cada usuario que no tenga permitido crear un nuevo tema.
user.custom_fields['can_create_topic'] = false;
¿Qué quiero hacer?
Quiero ocultar el botón “+ Nuevo tema” para algunos usuarios según una lógica personalizada.
Pregunta
¿Es posible personalizar can_create_topic en guardian para que realice una verificación adicional en un user_custom_field y determine si un usuario tiene permiso para crear un nuevo tema o no?
Sí, por supuesto que puedes modificar las clases de Ruby con complementos. Es software, fácil de modificar, no es un viaje interestelar utilizando velas solares o agujeros de gusano, así que, por supuesto, es posible modificar el comportamiento de Discourse con un complemento:
No conozco tu caso de uso, pero la forma fácil y segura de hacerlo sería agregar o eliminar a esos usuarios de un grupo con el permiso para crear un tema.
@pfaffman Esa también es una buena idea. Pero creo que si pudiera sobrescribir el método can_create_topic? en TopicGuardian, sería una solución más limpia. ¿Hay algún plugin al que pueda referirme que tenga un cambio similar?
Lo que no sé es cómo puedo hacer que mi TopicGuardian herede del plugin para reemplazar TopicGuardian en la clase Guardian, ya que se está mezclando en lugar de ser inyectado como dependencia.
Vale. Creo que encontré la respuesta. Solo tengo que implementar el método “can_create_topic?” en module ::TopicGuardian y esto cambiará automáticamente el comportamiento de TopicGuardian sin necesidad de inyectarlo o registrarlo en algún lugar. Además, puedo usar el método super dentro de mi método sobrescrito para no tener que mantenerlo manualmente sincronizado con el método original en caso de que este cambie.