제한 태그가 있는 경우 '이 카테고리에 사용할 수 없음' 태그 표시

관리자 전용으로 제한된 태그가 하나 있습니다. 하지만 이 태그를 사용하려고 할 때(관리자로) 계속 Can't be used in this category라는 메시지가 뜨네요. 이전에는 잘 작동했는데, 최신 업데이트 이후로 문제가 생긴 것 같습니다.

카테고리 설정을 확인해 보시고, 주제를 생성하려는 해당 카테고리에 이 항목들이 채워져 있는지 살펴봐 주시겠어요?

최근 “보안” 관련 변경 사항으로 인해 이전보다 제한이 더 엄격해졌을 가능성이 있다고 의심됩니다.

여러 카테고리에서 시도해 보았지만, 대부분 태그 제한이 없습니다. 태그도 어떤 카테고리 제한에도 추가되어 있지 않습니다.

새 태그를 하나 더 만들고, 태그 그룹을 통해 "태그는 다음 그룹에서만 보임"으로 설정한 뒤 admins 카테고리를 추가했습니다. 이렇게 하면 사용이 가능해야 하는데, 실제로는 사용할 수 없습니다.

재미있는 점은 처음에는 사용할 수 있었는데, 하루 뒤에 다시 들어가 보니 더 이상 사용할 수 없게 되었다는 것입니다.

카테고리가 선택되지 않은 상태에서는 사용할 수 없음이라고 표시되고, 카테고리가 선택된 상태에서는 이 카테고리에서 사용할 수 없음이라고 표시됩니다.

1년 전에 제가 태그를 사용할 수 없었던 이유를 찾기 위해 이 데이터 탐색기 쿼리를 작성했습니다. 이 쿼리는 태그나 태그 그룹이 다른 카테고리로 제한되어 있는지, 또는 카테고리가 다른 태그로 제한되어 있는지를 확인합니다. 이는 Group tag in new topic doesn't show the tags - #2 by Moin 링크에 있는 포럼 전체 개요와 비슷합니다.

-- [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

관리자는 사용이 제한되어 있더라도 태그를 사용할 수 있는 경우가 많기 때문에, 이 쿼리가 당신의 경우에 도움이 될지 확신은 없습니다. 하지만 시도해 볼 가치가 있다고 생각했습니다.

리포트 감사합니다 @AstonJ :+1: 앱 전체에서 어떤 태그를 볼 수 있고 사용할 수 있는지 일관되게 처리하여 이 문제를, 그리고 hopefully 다른 문제들도 수정할 것입니다.

1개의 좋아요