Usando un envoltorio genérico de bbcode, cree un componente de tema que oculte el contenido si no está en una cadena de grupo variable
Mostrar borradores
Creación de un envoltorio genérico de BBCode y un componente de tema
Comprender los requisitos
Según su solicitud, crearemos:
Un envoltorio genérico de BBCode que puede aceptar atributos personalizados.
Un componente de tema que oculta el contenido según una variable de cadena de grupo pasada al envoltorio de BBCode.
Implementación del envoltorio de BBCode
Crearemos un envoltorio de BBCode que pueda aceptar atributos arbitrarios. Estos atributos se pasarán al componente de tema para su evaluación.
Ruby
# config/initializers/bbcode.rb
Discourse::Plugins::BBCode.add_parser(:hide_if_not_in_group) do |tag, content|
attributes = tag.attributes || {}
"<div class='hide-if-not-in-group' data-group-names='#{attributes[:groups]}'>#{content}</div>"
end
Use el código con precaución.
Creación del componente de tema
El componente de tema verificará si el usuario actual pertenece a alguno de los grupos especificados en el atributo data-group-names. Si no es así, ocultará el contenido.
JavaScript
// app/assets/javascripts/discourse/components/hide-if-not-in-group.js
import Component from 'discourse/components/component';
export default Component.extend({
tagName: 'div',
classNames: ['hide-if-not-in-group'],
didInsertElement() {
const currentUserId = Discourse.currentUser.id;
const groupNames = this.element.dataset.groupNames.split(',');
// Función para verificar si el usuario está en alguno de los grupos especificados
const userIsInAnyGroup = (userId, groupNames) => {
// Reemplace esto con su lógica para verificar la membresía del grupo de usuarios
// Por ejemplo, usando la API de Discourse o lógica personalizada
return groupNames.some(groupName => {
// Verifique si el usuario está en el grupo llamado `groupName`
// Devuelva verdadero si el usuario está en el grupo, de lo contrario falso
});
};
if (!userIsInAnyGroup(currentUserId, groupNames)) {
this.element.style.display = 'none';
}
}
});
Use el código con precaución.
Uso del BBCode
Puede usar el BBCode de esta manera:
[hide_if_not_in_group groups="staff,moderators"]
Este contenido está oculto para los usuarios que no son personal ni moderadores.
[/hide_if_not_in_group]
Consideraciones importantes
Verificación de membresía de grupo: Reemplace la lógica de marcador de posición para verificar la membresía del grupo de usuarios con su implementación real. Es posible que necesite usar la API de Discourse o lógica personalizada para determinar la membresía del grupo.
Rendimiento: Para un gran número de usuarios o grupos, puede ser necesario optimizar la verificación de membresía de grupo.
Seguridad: Asegure la validación y el saneamiento adecuados de los nombres de grupo para evitar vulnerabilidades de seguridad.
Flexibilidad: Considere permitir atributos adicionales para el BBCode para controlar otros comportamientos (por ejemplo, mostrar un mensaje en lugar de ocultar contenido).
Siguiendo estos pasos, tendrá un envoltorio de BBCode y un componente de tema flexibles que pueden ocultar contenido según la membresía del grupo.
Usando Gemini. Pude obtener estos fragmentos de código anteriores. Sin embargo, tengo problemas para que funcionen.
Si alguien puede guiarme dónde colocarlo en un componente personalizado con las secciones para ingresar y corregir el código si es necesario.
El primer error que apareció cuando puse el JavaScript en común fue un error en “import” que esperaba un {

