Меня беспокоит не столько пустая трата места, сколько ещё одна «проблема» в вашем в остальном отличном 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");
}
}
Но это всё равно грязный хак: весь выпадающий список тегов в композере должен быть более контекстным на уровне ядра и учитывать все вышеперечисленные случаи.
