ユーザーが新しいトピックを作成し、作成中にタグ付けできない - タグが表示されない

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

ユーザーはトピックを作成できますが、トピックを作成するときにタグを使用できません。検索にはタグを使用できますが、トピックの作成時にタグはリストされません。

設定が間違っていますか?何か足りないものがありますか?スタッフまたは管理者のユーザーであれば、両方を一度に実行できます。アドバイスをいただければ幸いです。

「いいね!」 2

多くの人がこれに引っかかっていますが、管理者とモデレーターは他の全員に適用される多くの制限をスキップできます。

タグに他の制限がありますか?たとえば、特定のグループのみが使用できるタググループや、特定のカテゴリのタグに適用した制限などです。

タグページに移動してタグレンチ(:information_source:非スタッフ向け)をクリックすると、さらに役立つ情報が表示され、追加した制限を追跡できる場合があります。たとえば、ここメタの#brokenなどです。

「いいね!」 2

Discourse は、トピックの作成とタグ付けの際に trust_level_0 と trust_level_1 の混在を処理していない可能性がありますか?

これを追加すべきでしょうか。

そして、この行に trust_level_0 を追加しますか?

trust_level_1 にいるユーザーは、デフォルトで trust_level_0 にも含まれます。

「いいね!」 3

サイトの設定によっては、TL0がトピックを作成できるようにすることも検討してください。ユーザーは質問をするなどの目的で登録することが多く、なぜできないのか混乱する可能性があるためです(おそらく、解決する前に諦めてしまうでしょう)。

しかし、それがあなたの抱えている問題を説明するものではないと思います。

この問題はこのユーザーだけに発生していますか?他の人は正常にトピックにタグを付けることができますか?

タグの設定方法について、もう少し詳しく教えていただけますか?

@HAWK が言ったように、trust_level_one にいるユーザーはデフォルトで trust_level_0 にも含まれるため、混乱しています。この問題を抱えているユーザーは複数います。必要なカテゴリで使用できるタグを確認しました。

@JammyDodger 、私のタグ設定で確認すると面白い点はありますか?

「いいね!」 1

タグは非常に柔軟で、さまざまな方法で設定できるため、より具体的な提案を行うには、タグの設定方法についてもう少し詳しく教えていただく必要があります。

ただし、一般的なケースとしては、特定のタグのみを許可するように設定されたカテゴリがあり、「他のタグも許可する」にチェックが入っていない場合が考えられます。これにより、カテゴリが制限されたタグのみに限定され、それらのタグがスタッフ専用の場合、他の誰もタグを使用できなくなる可能性があります。

念のためフォローアップします(すでに解決されていることを願っています :crossed_fingers:)。Moin が同様の問題について詳細なトラブルシューティング投稿をこちらで行っています。

「いいね!」 2

やあ、@JammyDodgerと@HAWK。仕事で他の問題に巻き込まれていて、まだこの問題から抜け出せないんだ。Z

さて、カテゴリがあり、カテゴリの「タグ」設定には以下のように記述されています。

これらのタググループをこのカテゴリに制限する: TAG-GRP1, TAG-GRP2

「タググループの管理」に行くと、次のようになっています。

TAG-GRP1:

名前: TAG-GRP1
このグループのタグ: TAG-GRP1のタグのリスト
親タグ: -
このグループからトピックごとに1つのタグに制限する (チェックなし)

TAG-GRP2:

名前: TAG-GRP2
このグループのタグ: TAG-GRP2のタグのリスト
親タグ: -
このグループからトピックごとに1つのタグに制限する (チェックなし)

タグは次のグループにのみ表示されます: admin, moderators, trust_level_0, trust_level_1

そして、トピックを作成するときに使用したいタグを管理者として確認すると、次のようになります。

このタグは次のグループに属しています: 。次のカテゴリでのみ使用できます: TAG-GRP1, TAG-GRP2

すでにTL0とTL1を「タグトピック許可グループ」と「トピック作成許可グループ」に入れています。しかし、通常のユーザーTL1では、一部のタグを使用できません。

上記の投稿でリンクしたトラブルシューティング記事を確認できましたか?それは非常に詳細で、正しい方向性を示すのに役立つかもしれません。

正確にコピーできていないのではないでしょうか?

補足ですが、TL0とTL1の両方を設定に入れる必要はありません。TL1のすべてのメンバーはTL0でもあります(TL0は「すべての登録ユーザー」と考えてください)。TL0のみを追加すれば十分です。:+1:

「いいね!」 2

おすすめのリンクを確認しています。ありがとうございます。

「いいね!」 1

こんにちは @JammyDodger さん、投稿していただいたリンクありがとうございます。役に立つかと思いました。すでにリンクを確認しましたが、私の設定は問題ないと思います。その投稿の推奨事項は私にとって理にかなっており、設定は推奨通りで、テストのためにカテゴリ設定で「他のタグも許可する」を有効にしましたが、残念ながら問題は解決しませんでした。

権限設定を変更したときに「何か」を再起動する必要があるのかどうか疑問に思っています。

まず、この画像をすべてのテキストがブロックされた状態で共有したことをお許しください。ご理解いただければ幸いです。

これらは、TAG名、タググループ名、および使用されるはずのカテゴリですが、通常のユーザーでは使用できません。各カテゴリ名の近くに南京錠のアイコンが表示されるのは正常なことでしょうか。

皆さん、皆様の助けとアイデアに感謝します。

カテゴリが全員に表示されない場合は正常です。
たとえば、これは私のタグの1つです。「Test」の横にロックが表示されているのがわかります。


そして、そのカテゴリのセキュリティ設定は次のとおりです。

「全員」には「表示」権限がないため、カテゴリバッジの横にロックアイコンが表示されます。これは、このカテゴリが公開されていないことを示します。

私が説明した問題と関係があるのでしょうか?

ユーザーがカテゴリにアクセスできない場合、トピック作成時にそれを選択できなくなります。また、トピック作成時に選択できない場合、許可タグの構造も機能しなくなります。そのユーザーは、それらのカテゴリにアクセスできるグループに属していますか?

競合が何であるかをまだ特定できていない場合、タグの制限をいくつか削除して、権限の競合がどこで発生しているのかを正確に絞り込む必要があるかもしれません。

データエクスプローラープラグインはインストールされていますか? タグのすべての制限を表示するクエリを作成しました。それがあなたにも役立つかもしれません。結果を共有して、出力のタググループ名、タグ名、カテゴリ名を他の単語に置き換えることもできるかもしれません。そうすれば、ブラックボックスを比較するよりも、あなたを助けやすくなります。

@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を増やすべきだとわかりましたが、これは本番サーバーで発生しており、DBやPostgreSQLについてはあまり詳しくありません。サーバーを台無しにすることなく、機能させる方法を調べています。

参考までに、他のフォーラムでバージョン3.4.0.beta1-devを実行している友人とクエリを試したところ、スクリプトは問題なく実行され、正常に機能したようです。