Usuário não consegue criar um tópico e marcá-lo durante a criação - As tags não estão listadas

Eu tenho um usuário regular que é nível_de_confiança_0 e nível_de_confiança_1, e tenho estas configurações:

grupos permitidos para tópicos de tag: admins, moderators, staff, trust_level_0
grupos permitidos para criar tópicos: admins, moderators, trust_level_1
grupos permitidos para criar tag: admins, moderators, staff

O usuário pode criar os tópicos, mas não pode usar tags ao criar o tópico. Ele pode usar as tags para pesquisa, mas as tags não são listadas ao criar um tópico.

Minha configuração está incorreta? Estou perdendo alguma coisa? Com usuários da equipe ou administrador, consigo fazer as duas coisas ao mesmo tempo. Obrigado por qualquer conselho.

2 curtidas

Isso pegou algumas pessoas de surpresa, mas administradores e moderadores podem ignorar muitas das restrições que se aplicam a todos os outros.

Você tem alguma outra restrição aplicada às suas tags? Como um grupo de tags que apenas um determinado grupo pode usar, ou alguma restrição que você colocou em tags em uma categoria específica?

Se você for para uma página de tag e clicar na chave inglesa da tag (:information_source: para não-staff), ela deve mostrar mais algumas informações que podem ajudar a rastrear quaisquer limitações extras que você colocou nela. Ex: broken aqui no meta:

2 curtidas

Será que o Discourse não está lidando com a mistura entre trust_level_0 e trust_level_1 ao criar o tópico e marcá-lo?

Devo adicionar trust_level_1 a isto:

e adicionar trust_level_0 nesta linha:

Qualquer pessoa que esteja no trust_level_1 também está no trust_level_0 por padrão.

3 curtidas

Você pode querer permitir que o TL0 possa criar tópicos, dependendo da configuração do seu site, pois as pessoas frequentemente se inscrevem para fazer uma pergunta, etc., e podem ficar confusas sobre o motivo de não poderem (possivelmente desistindo antes de descobrir o motivo).

Mas acho que isso não explicaria o problema que você está tendo.

Esse problema está acontecendo apenas com esse usuário? Outras pessoas conseguem marcar tópicos com sucesso?

Você poderia fornecer mais detalhes sobre como configurou suas tags?

Como @HAWK disse, anyone que está no trust_level_one está por padrão no trust_level_0, e por esse motivo é confuso para mim. Há mais de um usuário com esse problema. Verifiquei as tags que podem ser usadas nas Categorias que precisamos.

@JammyDodger, o que poderia ser interessante verificar na minha configuração de tags?

1 curtida

As tags são bastante flexíveis e podem ser configuradas de várias maneiras, portanto, pode ser necessário obter mais detalhes sobre como você as configurou para fornecer sugestões mais específicas.

Embora uma configuração comum seja quando uma categoria foi configurada para permitir apenas certas tags e a opção ‘também permitir outras tags’ não tenha sido marcada. Isso poderia limitar a categoria às tags restritas e, se essas forem apenas para funcionários, isso poderia impedir qualquer outra pessoa de usar outras tags.

Apenas para acompanhar (embora espero que você já tenha conseguido resolver :crossed_fingers:), mas o Moin deu uma postagem completa de solução de problemas para algo semelhante aqui:

2 curtidas

Olá @JammyDodger e @HAWK . Estive enrolado com outros problemas no trabalho, mas ainda estou preso nisso. Z

Ok, eu tenho minhas Categorias, e nas configurações de “Tags” da categoria eu tenho:

Restringir estes GRUPOS de tags a esta categoria: TAG-GRP1, TAG-GRP2

Quando eu vou em “Gerenciar Grupos de Tags” eu tenho:

TAG-GRP1:

Nome: TAG-GRP1
Tags neste grupo: UMA LISTA DAS MINHAS TAGS PARA TAG-GRP1
Tag pai: -
Limitar uma tag por tópico deste grupo (desmarcado)

TAG-GRP2:

Nome: TAG-GRP2
Tags neste grupo: UMA LISTA DAS MINHAS TAGS PARA TAG-GRP2
Tag pai: -
Limitar uma tag por tópico deste grupo (desmarcado)

Tags são visíveis apenas para os seguintes grupos: admin, moderators, trust_level_0, trust_level_1

E quando eu verifico como Admin a tag que eu quero usar ao criar um tópico eu posso ver isso:

Esta tag pertence a estes grupos: . Ela só pode ser usada nestas categorias: TAG-GRP1, TAG-GRP2

Eu já tenho TL0 e TL1 em “grupos permitidos para tópico de tag” e “grupos permitidos para criar tópico”. Mas com um usuário regular TL1 eu não consigo usar algumas tags.

Você conseguiu verificar a postagem de solução de problemas que linkei acima? É bem completa e pode te ajudar a encontrar a direção certa.

Não tenho certeza se você copiou isso com precisão?

Apenas como informação adicional, não há necessidade de colocar tanto TL0 quanto TL1 em nenhuma configuração, pois todos os membros do TL1 também são TL0 (pense no TL0 como ‘todos os usuários registrados’). Adicionar apenas TL0 seria suficiente. :+1:

2 curtidas

Verificando seu link recomendado. Obrigado.

1 curtida

Olá @JammyDodger, Obrigado pelo link que você postou, pensei que poderia me ajudar. Eu já verifiquei o link e acho que minhas configurações estão corretas, a recomendação naquela postagem faz sentido para mim, e minhas configurações estão como recomendado e habilitei para testar o Also allow other tags nas configurações de Categoria, mas infelizmente isso não resolveu meu problema. Eu me pergunto se preciso reiniciar “algo” quando as configurações de permissão mudam.

Primeiramente, peço desculpas por compartilhar esta imagem com todo o texto bloqueado, espero que possam entender.

Esses são o nome da TAG, o nome dos grupos de tags e as categorias onde deveriam ser usadas, mas não consigo usar com meu usuário regular. Gostaria de saber se é normal ter um ícone de cadeado perto de cada nome de categoria.

Obrigado a todos pela ajuda e pelas ideias.

É normal quando a categoria não é visível para todos.
Por exemplo, esta é uma das minhas tags. Você pode ver que há um cadeado ao lado de “Teste”


E estas são as configurações de segurança dessa categoria:

“Todos” não tem permissão de “ver”, é por isso que o ícone de cadeado é mostrado ao lado do distintivo da categoria. Indica que esta categoria não é pública.

Isso pode ter algo a ver com o problema que descrevi?

Na medida em que se o usuário não puder acessar a categoria, ele não poderá selecioná-la ao criar um tópico (e se ele não puder escolhê-la ao criar um tópico, então sua estrutura de ‘tag permitida’ também não entrará em vigor). O usuário faz parte de um grupo que pode acessar essas categorias?

Acho que se você ainda não identificou qual é o conflito, talvez precise começar a remover algumas das restrições de tag e ver se consegue identificar exatamente onde o conflito de permissão está ocorrendo.

Você tem o plugin Data Explorer instalado? Criei uma consulta que me mostra todas as limitações de uma tag. Talvez isso também ajude você. Você poderia até mesmo compartilhar os resultados e substituir nomes de grupos de tags, nomes de tags e nomes de categorias por outras palavras na saída. Assim, será um pouco mais fácil ajudá-lo do que comparar caixas pretas.

Obrigado @Moin. Sim, eu tenho. Tenho o plugin Data Explorer instalado. Desculpe pela resposta tardia novamente.

Esta é a consulta que me ajudou a identificar o problema na minha configuração. Faz algum tempo que não a uso, então não me lembro se havia algo que pensei em melhorar.

Você pode filtrar por tag ou grupo de tags

-- [params]
-- null string :tag_name
-- null string :tag_group

WITH allowed_tags AS (
  SELECT ct.category_id, t.id AS tag_id
  FROM category_tags ct
  JOIN tags t ON t.id = ct.tag_id
  UNION
  SELECT ctg.category_id, tgm.tag_id
  FROM category_tag_groups ctg
  JOIN tag_group_memberships tgm ON tgm.tag_group_id = ctg.tag_group_id
),

restricted_categories AS (
  SELECT c.id, c.name
  FROM categories c
  WHERE c.allow_global_tags = FALSE
    AND (
      EXISTS (SELECT 1 FROM category_tags ct WHERE ct.category_id = c.id)
      OR EXISTS (SELECT 1 FROM category_tag_groups ctg WHERE ctg.category_id = c.id)
    )
),

all_tag_category_combinations AS (
  SELECT t.id AS tag_id, t.name AS tag_name, rc.id AS category_id, rc.name AS category_name
  FROM tags t
  CROSS JOIN restricted_categories rc
  WHERE t.target_tag_id IS NULL
),

not_allowed_tags AS (
  SELECT atcc.tag_id, atcc.category_id, atcc.category_name
  FROM all_tag_category_combinations atcc
  LEFT JOIN allowed_tags al
    ON al.tag_id = atcc.tag_id AND al.category_id = atcc.category_id
  WHERE al.tag_id IS NULL
)

SELECT
  main.id AS tag_id,
  main.name AS tag_name,
  COALESCE(STRING_AGG(DISTINCT syn.name, ', '), '') AS synonyms,

  tg.id AS tag_group_id,
  COALESCE(parent_tag.name, '') AS parent_tag_name,
  CASE WHEN tg.one_per_topic THEN 'true' ELSE '' END AS one_tag_per_topic,

  COALESCE(
    STRING_AGG(
      DISTINCT
      CASE
        WHEN crtg.min_count IS NOT NULL THEN crtg_cat.name || ' (' || crtg.min_count || ')'
        ELSE NULL
      END,
      ', '
    ),
    ''
  ) AS required_in_categories_with_min,

  COALESCE(STRING_AGG(DISTINCT ctg_cat.name, ', '), '') AS tag_group_limited_to_category,
  COALESCE(STRING_AGG(DISTINCT ctags_cat.name, ', '), '') AS tag_limited_to_category,
  COALESCE(STRING_AGG(DISTINCT nat.category_name, ', '), '') AS not_allowed_in_categories,

  CASE
    WHEN COUNT(DISTINCT g.name) > 0 THEN COALESCE(STRING_AGG(DISTINCT g_use.name, ', '), '')
    ELSE ''
  END AS use_limited_to,
  COALESCE(STRING_AGG(DISTINCT g.name, ', '), '') AS view_only_groups

FROM tags AS main
LEFT JOIN tags AS syn ON syn.target_tag_id = main.id
LEFT JOIN tag_group_memberships AS tgm ON tgm.tag_id = main.id
LEFT JOIN tag_groups AS tg ON tg.id = tgm.tag_group_id
LEFT JOIN tags AS parent_tag ON parent_tag.id = tg.parent_tag_id
LEFT JOIN tag_group_permissions tgp ON tgp.tag_group_id = tg.id AND tgp.permission_type = 3
LEFT JOIN groups g ON g.id = tgp.group_id

LEFT JOIN category_required_tag_groups AS crtg ON crtg.tag_group_id = tg.id
LEFT JOIN categories AS crtg_cat ON crtg.category_id = crtg_cat.id
LEFT JOIN category_tag_groups AS ctg ON ctg.tag_group_id = tg.id
LEFT JOIN categories AS ctg_cat ON ctg.category_id = ctg_cat.id
LEFT JOIN category_tags AS ctags ON ctags.tag_id = main.id
LEFT JOIN categories AS ctags_cat ON ctags.category_id = ctags_cat.id
LEFT JOIN not_allowed_tags AS nat ON nat.tag_id = main.id
LEFT JOIN tag_group_permissions tgp_use ON tgp_use.tag_group_id = tg.id AND tgp_use.permission_type = 1
LEFT JOIN groups g_use ON g_use.id = tgp_use.group_id

WHERE
  main.target_tag_id IS NULL AND
  (
    :tag_name IS NULL OR
    LOWER(main.name) LIKE LOWER('%' || :tag_name || '%') OR
    LOWER(syn.name) LIKE LOWER('%' || :tag_name || '%')
  ) AND
  (
    :tag_group IS NULL OR
    LOWER(tg.name) LIKE LOWER('%' || :tag_group || '%')
  )

GROUP BY
  main.id, main.name, tg.id, tg.name, parent_tag.name, tg.one_per_topic
ORDER BY main.name, tag_group_id

@Moin, tentei a consulta na versão 3.5.0.beta8-dev e não funcionou. Recebi esta mensagem de erro:

PG::QueryCanceled: ERROR:  canceling statement due to statement timeout

Pesquisei este erro no Google e descobri que devo aumentar o statement_timeout, mas isso está acontecendo em um servidor de produção e não sei muito sobre bancos de dados, PostgreSQL. Estou vendo como fazer funcionar sem estragar o servidor.

Apenas por curiosidade, tentei a consulta com um amigo em outro fórum rodando a versão 3.4.0.beta1-dev e o script rodou sem problemas e pareceu funcionar bem.