Пользователь не может создать новую тему и добавить теги при создании — теги не отображаются

У меня есть обычный пользователь с уровнями доверия trust_level_0 и trust_level_1, и вот мои настройки:

tag topic allowed groups: admins, moderators, staff, trust_level_0
create topic allowed groups: admins, moderators, trust_level_1
create tag allowed groups: admins, moderators, staff

Пользователь может создавать темы, но не может использовать теги при их создании. Он может использовать теги для поиска, но при создании темы список тегов не отображается.

Неправильно ли я настроил параметры? Что-то упустил? С пользователем со статусом staff или admin я могу делать всё сразу. Спасибо за любые советы.

Это застало врасплох многих, но администраторы и модераторы могут обходить многие ограничения, которые действуют для остальных.

Есть ли у вас какие-либо дополнительные ограничения для ваших тегов? Например, группа тегов, доступная только определённой группе пользователей, или какие-либо ограничения, наложенные на теги в конкретной категории?

Если вы перейдёте на страницу тега и нажмёте на значок гаечного ключа (:information_source: для пользователей без прав администратора), там должна отобразиться дополнительная информация, которая может помочь выявить любые дополнительные ограничения, которые вы установили для него. Например, broken здесь, на Meta:

Возможно, Discourse некорректно обрабатывает смешение trust_level_0 и trust_level_1 при создании темы и её тегировании?

Должен ли я добавить trust_level_1 сюда:

и добавить trust_level_0 в эту строку:

Любой пользователь с уровнем доверия 1 по умолчанию также имеет уровень доверия 0.

Возможно, стоит разрешить пользователям уровня TL0 создавать темы, в зависимости от настроек вашего сайта, так как пользователи часто регистрируются, чтобы задать вопрос и т. д., и могут быть сбиты с толку, почему у них это не получается (возможно, они откажутся от попыток, так и не разобравшись в ситуации).

Однако, я не думаю, что это объясняет вашу проблему.

Эта проблема возникает только у этого пользователя? Могли ли другие люди успешно помечать темы?

Могли бы вы предоставить больше подробностей о том, как вы настроили теги?

Как сказал @HAWK, любой пользователь с trust_level_one по умолчанию также находится в trust_level_0, и поэтому мне это кажется запутанным. С этой проблемой столкнулось более одного пользователя.

Я проверил теги, которые можно использовать в необходимых нам категориях.

@JammyDodger, что было бы интересно проверить в моей настройке тегов?

Теги довольно гибкие и могут быть настроены множеством различных способов, поэтому для более конкретных рекомендаций нам может потребоваться дополнительная информация о том, как вы их настроили.

Однако распространённая ситуация возникает, когда категория настроена так, что в ней разрешено использовать только определённые теги, а опция «Также разрешить другие теги» не включена. Это может ограничить категорию только разрешёнными тегами, и если эти теги доступны только сотрудникам, это может помешать другим пользователям использовать любые другие теги.

Просто чтобы уточнить (хотя, надеюсь, вы уже смогли найти проблему :crossed_fingers:), но Moin опубликовал подробное руководство по устранению неполадок для похожей ситуации здесь:

Привет, @JammyDodger. У меня на работе возникли другие проблемы, но я всё ещё застрял на этом. Z

Хорошо, у меня есть категории, и в настройках «Теги» категории у меня указано:

Ограничить эти группы тегов этой категорией: TAG-GRP1, TAG-GRP2

Когда я перехожу в «Управление группами тегов», у меня есть:

TAG-GRP1:

Название: TAG-GRP1
Теги в этой группе: СПИСОК МОИХ ТЕГОВ ДЛЯ TAG-GRP1
Родительский тег: -
Ограничить одним тегом на тему из этой группы (не отмечено)

TAG-GRP2:

Название: TAG-GRP2
Теги в этой группе: СПИСОК МОИХ ТЕГОВ ДЛЯ TAG-GRP2
Родительский тег: -
Ограничить одним тегом на тему из этой группы (не отмечено)

Теги видны только следующим группам: admin, moderators, trust_level_0, trust_level_1

И когда я как администратор проверяю тег, который хочу использовать при создании темы, я вижу следующее:

Этот тег принадлежит следующим группам: . Его можно использовать только в этих категориях: TAG-GRP1, TAG-GRP2

У меня уже есть TL0 и TL1 в «разрешённых группах для тегирования тем» и «разрешённых группах для создания тем». Но обычный пользователь с уровнем TL1 не может использовать некоторые теги.

Удалось ли вам уже ознакомиться с постом по устранению неполадок, на который я дал ссылку выше? Он довольно подробный и может помочь вам найти правильное направление.

Мне кажется, вы скопировали это не совсем точно?

Кстати, нет необходимости указывать в настройках одновременно TL0 и TL1, так как все участники TL1 также являются участниками TL0 (представьте TL0 как «все зарегистрированные пользователи»). Достаточно добавить только TL0. :+1:

Проверяю вашу рекомендованную ссылку. Спасибо.

Привет @JammyDodger, спасибо за ссылку, которую вы опубликовали, я думал, что она мне поможет. Я уже проверил ссылку и считаю, что мои настройки в порядке. Рекомендация в том посте имеет для меня смысл, и мои настройки соответствуют рекомендациям. Я также включил для теста «Также разрешить другие теги» в настройках категории, но, к сожалению, это не решило мою проблему.

Интересует, нужно ли перезапускать что-то при изменении настроек разрешений.

Сначала позвольте мне извиниться за то, что я делюсь этим изображением, где весь текст скрыт, надеюсь, вы сможете понять.

Это названия тегов, названия групп тегов и категории, в которых они должны использоваться, но я не могу использовать их со своей обычной учетной записью. Я хотел бы узнать, нормально ли видеть значок замка рядом с каждым названием категории.

Спасибо вам всем за всю вашу помощь и идеи.

Это нормально, если категория не видна всем.
Например, вот один из моих тегов. Вы можете заметить, что рядом с “Test” стоит замок.


А вот настройки безопасности этой категории:

У группы “Все” нет разрешения “просмотр”, поэтому рядом с бейджем категории отображается значок замка. Это указывает на то, что категория не является публичной.

Может ли это быть связано с проблемой, которую я описал?

Поскольку, если пользователь не имеет доступа к категории, он не сможет выбрать её при создании темы (а если он не может выбрать её при создании темы, то и ваша структура «разрешённых тегов» не сработает). Является ли пользователь частью группы, имеющей доступ к этим категориям?

Полагаю, что если вы ещё не выяснили, в чём именно заключается конфликт, вам стоит начать постепенно отключать некоторые ограничения для тегов, чтобы точно определить, где возникает конфликт прав доступа.

Установлен ли у вас плагин Data Explorer? Я создал запрос, который показывает все ограничения для тега. Возможно, это поможет и вам. Вы даже можете поделиться результатами и заменить названия групп тегов, названия тегов и названия категорий на другие слова в выводе. Тогда будет немного проще помочь вам, чем сравнивать «чёрные ящики».

Спасибо, @Moin. Да, у меня установлен плагин Data Explorer. Извините еще раз за поздний ответ.

Это запрос, который помог мне обнаружить проблему в моей конфигурации. Прошло уже некоторое время с тех пор, как я его использовал, поэтому я не помню, думал ли я о чём-то, что можно было бы улучшить.

Вы можете фильтровать по тегу или группе тегов

-- [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, я попробовал выполнить запрос в версии 3.5.0.beta8-dev, но он не сработал. Я получил следующее сообщение об ошибке:

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

Я поискал эту ошибку в Google и выяснил, что нужно увеличить statement_timeout, но это происходит на продакшн-сервере, и я не очень хорошо разбираюсь в базах данных и PostgreSQL. Я пытаюсь понять, как заставить это работать, не сломав сервер.

Просто из любопытства я попробовал выполнить этот запрос с другом на другом форуме, где запущена версия 3.4.0.beta1-dev, и скрипт выполнился без каких-либо проблем, похоже, всё прошло успешно.

Спасибо за ваше время и советы.