I would like to support this. My use case - I have a group of “limited” users; I want them to be able to read most categories, but write only in one, let’s call it “starting cat.”.
I can of course use existing solution (and trust levels of course), but if I want to have more fine-grained permission system, it gets hectic.
Instead of setting up permissions like this:
display: everyone
post: everyone NOT greenhorns
I have to do something like this:
display: everyone
post: Group 1
Group 2
(...and basically each and every other group...)
reply: Group a
Group b
(...and once again...)
@robmc, looks like Jeff recategorized this already. Unless I’ve misread this, your request is the same as mine (linked above, long before I joined the Discourse team). Do you mind if the topics are combined, or do you feel yours is different?
Well, our use cases are similar, but our current proposed solutions look a little different
I don’t mind combining them at all, but I think that your original proposal was to have a single category for putting members into that would stop them being in ‘everyone’ but I would prefer to have logic in the security that allowed us to use “IS NOT” (or can’t / exclude) in the same way we use “IS” (or Can) as I think this would give more flexibility
They are similar issues, but not quite the same and it is possible that a single technical solution would address both, but I’m not sure. Happy to put them together to explore it though
I’m not precious … just wanting to help make this even better for everyone
So my usecase at the time was a single category that I needed to restrict access to, but the solution is the same as you suggested: an “exclude” or “not” security permission for categories.
Having Add+Subtract moves the system into a whole range of potential conflicts requiring resolution. At the least, the order of putting in permissions will now be significant, and so there will necessitate a reorder function to move things up/down.
Otherwise, there is no way to resolve potential conflicts when a person:
is in more than one group
one group is permitted access
another group is denied access
EDIT: Or you can say Add always trumps Subtract, or vice versa. Nevertheless, it makes things very hard to understand.
Although I can understand the pain you’re going through in order to request this… I have tons and tons of groups and each category’s permissions list is like 15 long, just to do what you’re looking to do – that is, to exclude a particular group from access while opening to most others.
Since all sites are currently like yours, it might be that the solution is to have two steps / sections … the first is the INCLUSION (which is the current context, so even if the change is made nothing is affected) where you build up a total population to view this, then a second step below would be the EXCLUSION which would remove a portion of those that matched certain criteria.
There is also a need for intersection, meaning that the permission is only for users with two or more groups set.
For example, Sales & USA ==> any user having both the group Sales and USA. Then this combo should have access to USA Sales Leads category. In other words, the group is the “intersection” of a number of groups. Currently, the permission system works on the “union” of listed groups.
This will solve neatly the common headaches of setting up permission with sub-categories (where in many cases, the users permitted into the sub-categories will only be among the ones permitted into the parent category). It is necessary because, in Discourse, sub-categories do NOT inherit permissions.
Я тоже хотел бы видеть опцию исключения, и, возможно, это можно реализовать довольно просто: разрешить добавлять группу в настройки безопасности категории и снимать галочку «Просмотр».
В настоящее время, если я добавляю группу в настройки безопасности категории, я могу снять галочки «Создание» и «Ответы», но не «Просмотр». Если бы я мог снять галочку «Просмотр», логика, вероятно, была бы следующей: «если пользователь принадлежит к любой группе, у которой нет прав на просмотр, не позволять пользователю видеть категорию».
Это заставляет задуматься о том, как сейчас работают конфликтующие разрешения: если пользователь входит в группу A и группу B, и группа A может создавать темы в этой категории, а группа B — нет, сможет ли пользователь создать тему в этой категории? Иными словами, какое правило имеет приоритет?
Я предполагаю, что сейчас система работает так: «если пользователь принадлежит к любой группе, имеющей право X, то предоставить это право пользователю», но я не уверен… Я только что протестировал, и, похоже, всё именно так.
Разрешения по сути суммируются; в этом смысле конфликтов не существует. Всегда побеждает самое высокое унаследованное разрешение. Я могу быть добавлен в одну группу, которая позволяет мне видеть категорию, и в другую, которая позволяет мне вносить вклад.
Зачем вам нужно исключать группу, если вы также явно предоставили доступ через другое членство?
Я думаю, что самый простой пример — это предоставить права «Просмотр», «Ответ» и «Создание» всем пользователям, а затем добавить группу X и снять галочки с этих прав. Таким образом, все смогут просматривать, отвечать и создавать темы в этой категории, кроме участников группы X.
Как это может быть актуально для меня сейчас: я использую Memberful как провайдера единого входа (SSO) для Discourse и WordPress. Я хочу продавать три пакета: два более дорогих с доступом к форуму и самый дешевый — без доступа. Однако, возможно, из-за синхронизации учетных записей через SSO пользователи все равно получат доступ. Поэтому я хочу ограничить их права, чтобы они не могли видеть категории и, возможно, могли только отправлять мне личные сообщения. Я думаю, что это можно сделать, добавив группы Y и Z ко всем категориям вместо группы «Все», и это сработает, поскольку у меня не так много групп. Но если бы групп было много, проще было бы просто снять галочку с права «Просмотр».
Я тоже хотел бы иметь возможность создавать небольшие группы и исключать их из некоторых категорий на сайте, но при этом разрешать им просматривать другие категории так же, как и полноправным участникам.
Используя приведённое выше сравнение с Slack, можно сделать участников такой небольшой группы «Многочастными гостями»: эти аккаунты получают доступ только к выбранным каналам.
Короче говоря, я хотел бы иметь возможность исключать группы из отдельных категорий.
Кажется, я придумал способ реализовать что-то подобное, используя уже существующий функционал.
Допустим, я хочу, чтобы темы с тегом «secret» были невидимы для определённой группы.
Разве не достаточно просто изменить настройки группы так, чтобы темы с тегом «secret» были отключены (замушены) для её участников?
Аналогично, если я хочу сделать категорию невидимой для определённой группы, разве не достаточно изменить настройки группы так, чтобы все темы в этой категории были отключены для её участников? (а также установить компонент темы Hide Muted Categories).
Кроме того, я не могу найти документацию, описывающую, как работает функционал отключения (мьюта) в Discourse — кто-нибудь может помочь?
Насколько скрытыми должны быть эти темы? По умолчанию, когда вы скрываете что-либо (для всех или для членов группы), пользователи всё ещё могут изменить свои настройки, чтобы отменить это скрытие. Кроме того, скрытые темы не отображаются в списках тем, но, например, остаются видимыми в результатах поиска.