Безопасность — негативные права (как?)

(почему объясняется в последнюю очередь)

У нас есть права «Создавать» и «Смотреть» и т. д. Мне нужен простой способ предоставить группе право «Смотреть» для всего сайта, за исключением нескольких областей — по сути, отрицательное право, которое применяется с более высоким приоритетом.

Просто думаю вслух, так как проверка всех возможных вариантов займёт время. Немного надеюсь, что кто-то скажет: «А почему бы вам не сделать это вот так…».

Возможно, я мог бы создать группу, у которой есть только право «Смотреть». Думаю, Discourse достаточно умён, чтобы если у кого-то есть право «Смотреть», а у всех остальных — право «Писать», то эта область станет доступна только для просмотра для данной группы? Это было бы своего рода автоматическим внедрением отрицательного права (самый дешёвый вариант), хотя и не самым логичным. Проблема в том, что даже если это сработает, прохождение по всем областям и добавление группы для «неприятных, но необходимых» пользователей займёт время.

Нельзя удалить пользователя из группы «Все», хм.

Создание нового псевдо-«Все» с правами для всех, кроме проблемных пользователей, — это огромная работа (возможно, не с помощью скрипта, но всё же).

Как я уже сказал, думаю вслух, пытаясь решить проблему… очень надеюсь на озарение :D.


Сама проблема заключается в том, что один пользователь пишет свои сообщения в любую область, которую он в данный момент читает (часто — в самый последний пост чего угодно). Это не критично, за исключением того, что его сообщения настолько бессвязны, что неизбежно будут мешать другим пользователям. Проблема в том, что он абсолютно необходим в одной области (100%, финансовая тема), но я был бы рад ограничить его режимом «Только просмотр» везде в остальных местах.

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

3 лайка

Думаю, в Discourse максимально близкое решение — это замолчать пользователя. Это позволит ему читать и видеть контент, но не публиковать сообщения:

https://meta.discourse.org/t/discourse-moderation-guide/63116#silence-the-user-26

Это решение недостаточно гибкое, чтобы разрешить ему публиковать сообщения только в определённых категориях.

Но, как упоминается в руководстве для модераторов, сначала стоит попробовать связаться с пользователем, прежде чем прибегать к функциям «замолчать» или «забанить»:

https://meta.discourse.org/t/discourse-moderation-guide/63116#the-difficult-user-22

1 лайк

Нет, эти права всегда суммируются.

4 лайка

Да, к сожалению, это не сработает, так как он владеет половиной форума, и в 95% случаев его решение необходимо :slight_smile: . Ну что ж, это случается редко, да и уборка — не такая уж большая проблема (пропустив вопросы, где были его посты). Хорошее техническое решение всегда можно оправдать «техническими трудностями» :wink:

Только что пообщались, оказывается, он начинает спамить везде, когда достигает максимального уровня в 3 поста. Но, возможно, я снова переместил его в личные сообщения, пока он в следующий раз не забудет об этом…

Хм, может быть, полезно зафиксировать его уровень доверия на 0 или что-то в этом роде :smiley: .

1 лайк

Я почти всегда говорил, что отрицательные права доступа (обычно) — это результат плохого дизайна. Удивительно, что я нашёл ситуацию, где они действительно могут пригодиться.

В конце концов, это по сути битовая маска: сначала применяются все добавочные права, а отрицательные — в последнюю очередь.

Представляю, как это может быть полезно для пожилых людей (не самый политкорректный пример): разрешать доступ только к разделу «Как пользоваться» и затем к тем разделам, которые интересуют их конкретную группу.

Думаю, мне просто повезло: я почти все разделы сделал закрытыми, поэтому по умолчанию пользователи не отвлекаются на то, что их не интересует. Для 99% пользователей слишком сложно самому отметить раздел как «не следить» или включить режим «без уведомлений». Или отключить ежедневные/еженедельные дайджесты. Проще переместить всё в спам, а потом жаловаться, что они так и не получили уведомления о чём-то :D.

1 лайк

Ещё один пример — если вы хотите запретить доступ определённым людям, например, к каналу Marketplace.

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

groupA = groupB И НЕ groupC

При этом groupA будет автоматически обновляться, если кто-то присоединится к groupB или groupC или покинет их. Я планирую завершить разработку в течение следующего месяца или около того.

4 лайка

Эта концепция также обсуждалась здесь ранее:

Я всё ещё поддерживаю это :smiling_face:

1 лайк

Круто, поиск обычно находит похожие вещи, но подобрать правильные слова здесь было настоящей работой :slight_smile: . По сути, группа исключений прав, которая всегда имеет наивысший/окончательный приоритет, была бы самым простым решением (не несколько групп или что-то слишком сложное).

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

Я написал две системы наследования и исключения прав за свою жизнь, и хотя их создание казалось довольно сложным, как только логика и порядок были установлены, они работали как по маслу (и при этом не требовалось много кода). Однако мало кто понимал, как работает каждая из них <улыбка>. Четыре уровня разрешённого наследования и исключения, вероятно, требуют уровня Mensa или чего-то подобного. Даже когда есть варианты использования для всех уровней.

1 лайк

Так что проблема в том, что он не может писать там, где вы хотите, поэтому начинает писать в других местах. [quote]
Количество сообщений подряд, которое пользователь может отправить в теме, прежде чем ему запретят добавлять новые ответы. Это ограничение не распространяется на владельца темы, сотрудников сайта или модераторов категории.
[/quote]

Значит, решение — убедиться, что он может писать там, где вы хотите. Не максимальное количество последовательных ответов ли это вызывает проблему?

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

2 лайка

Что ж, настоящая проблема, которая была намёкнута довольно туманно, заключается в том, что на форуме нет «алкозамка». С другой стороны, ему не нужно устраиваться на работу, так что проговаривать это на самом деле не имеет значения.

Так что вопрос скорее в том, что ответы появляются после того, что он прочитал в последний раз. После 15-го пива обучение не очень помогает :D. В данном случае даже ограниченный доступ вне часов с 9 до 17 не помог бы. Тексты на самом деле довольно поучительные, проблема в том, что как только вы упоминаете (любого) бога или существование (или несуществование) чего-либо, вы неизбежно обидите половину планеты…

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

3 лайка

Это сложная задача.

По сути, для работы в этой области требуется масштабная переработка системы разрешений на уровне кода.

1 лайк