Enable tagging only in some categories

Меня беспокоит не столько пустая трата места, сколько ещё одна «проблема» в вашем в остальном отличном JS-коде. Возможно, вы сможете это проверить?

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

В данном случае код проверяет только то, разрешены ли теги в категории или есть ли элементы в массиве tag_groups.length > 0 или allowed_tags > 0. К сожалению, это условие всегда выполняется, так как в ограниченных группах тегов присутствуют и те группы, которые предназначены только для сотрудников.

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

 if(category != null) {
                if (
                    category.allow_global_tags == true ||
                    category.allowed_tag_groups.length > 0 ||
                    category.allowed_tags.length > 0
                ) {
                    toggleTagChooser("visible");
                }
            }

Возможно, для не-сотрудников следует подсчитывать только публичные элементы в массиве category.allowed_tag_groups.length (или в массиве доступны только имена, но не их статусы):

public_category.allowed_tag_groups = [public_tag_group.name, staff_only_tag_group.name]
private_category.allowed_tag_groups = [private_tag_group.name, staff_only_tag_group.name]

Хорошо, обновление:

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

             var non_staff_tag_groups = category.allowed_tag_groups.filter(filterHidden);
                function filterHidden(value) {
                  if(value.toLowerCase().indexOf("hidden") === -1 && value.toLowerCase().indexOf("system") === -1) return value;
                }
                if (
                    category.allow_global_tags == true ||
                    (category.allowed_tag_groups.length > 0 && this.currentUser.staff) ||
                    (non_staff_tag_groups.length > 0 && !this.currentUser.staff) ||
                    category.allowed_tags.length > 0
                ) {
                    toggleTagChooser("visible");
                }
            }

Но это всё равно грязный хак: весь выпадающий список тегов в композере должен быть более контекстным на уровне ядра и учитывать все вышеперечисленные случаи.

2 лайка