Эти ссылки используют несколько иной сериализатор, так как там не нужны все данные о группах.
Тем не менее, вы можете сохранить отфильтрованный список групп текущего пользователя при первоначальной загрузке страницы и использовать его как справочник для проверки членства. Эта информация уже доступна в начальном пакете данных, поэтому дополнительных запросов или иных накладных расходов не возникает. Что-то вроде этого:
<script type="text/discourse-plugin" version="0.8">
const user = api.getCurrentUser();
if (!user) {
return;
}
const userGroups = user.groups.map(group => group.name);
api.reopenWidget("pm-map-user-group", {
transform(attrs) {
const group = attrs.group;
const isGroupUser = Object.values(userGroups).includes(group.name);
// {href: "/g/foo"};
let groupURL = this._super(...arguments);
if (isGroupUser && group.has_messages) {
groupURL.href = `${groupURL.href}/messages/`;
}
return groupURL;
}
});
</script>
Разместите этот фрагмент в отдельных тегах скрипта и добавьте его в заголовок вместе с остальными фрагментами. Разделение необходимо, потому что код быстро завершает выполнение, если пользователь не авторизован.