Немного проясните про правила в RBAC
Немного проясните про правила в RBAC
Кода не будет, продумываю архитектуру ролей и разрешений.
Обычный сайт: пользователи, модераторы, админы ну и все остальные (гости).
Планируется реализовать чат для всех. Но в чате предусмотрен МУТ(mute). То есть если на пользователя наложен мут, то он не сможет писать в чат какое-то время (10 минут, 1 час, 10 дней и так далее) за какое-то нарушение - нецензурщина, реклама, флуд и так далее.
Если я правильно понял, то мне нужно в разрешении "Писать в чат" добавить правило, которое будет проверять может ли пользователь туда писать, то есть не наложен ли мут? Значит нужно дополнительно создать таблицу MUTE для пользователей, в которую заносить пользователей и время до которого наложен мут. А правилом проверять его наличие пользователя в этой таблице и время. Если время истекло - значит вернуть все ок, а в правиле (я пока так думаю) - удалять пользователя из таблицы МУТа.
То есть правило проверяет есть ли пользователь такой-то в таблице МУТ, если нет - вернуть true, если есть - проверить истекло ли время, если истекло то прямо в правиле удалить его из этой таблицы.
Я правильно понимаю как это нужно сделать? Или по-другому принято?
Обычный сайт: пользователи, модераторы, админы ну и все остальные (гости).
Планируется реализовать чат для всех. Но в чате предусмотрен МУТ(mute). То есть если на пользователя наложен мут, то он не сможет писать в чат какое-то время (10 минут, 1 час, 10 дней и так далее) за какое-то нарушение - нецензурщина, реклама, флуд и так далее.
Если я правильно понял, то мне нужно в разрешении "Писать в чат" добавить правило, которое будет проверять может ли пользователь туда писать, то есть не наложен ли мут? Значит нужно дополнительно создать таблицу MUTE для пользователей, в которую заносить пользователей и время до которого наложен мут. А правилом проверять его наличие пользователя в этой таблице и время. Если время истекло - значит вернуть все ок, а в правиле (я пока так думаю) - удалять пользователя из таблицы МУТа.
То есть правило проверяет есть ли пользователь такой-то в таблице МУТ, если нет - вернуть true, если есть - проверить истекло ли время, если истекло то прямо в правиле удалить его из этой таблицы.
Я правильно понимаю как это нужно сделать? Или по-другому принято?
Осторожно! Вы общаетесь с новичком
Re: Немного проясните про правила в RBAC
Проверка будет происходить при входе пользователя в чат? Можно не пускать всех кто есть в таблице МУТ, а удаление повесить на крон.girmate писал(а):То есть правило проверяет есть ли пользователь такой-то в таблице МУТ, если нет - вернуть true, если есть - проверить истекло ли время, если истекло то прямо в правиле удалить его из этой таблицы.
Re: Немного проясните про правила в RBAC
Нет. Чат будет виден как виджет и любой желающий может туда писать, кроме гостей.
Осторожно! Вы общаетесь с новичком
Re: Немного проясните про правила в RBAC
Да, крон будет только для удаления старых записей, чтобы освободить БД (например, раз в сутки).za4me писал(а):girmate писал(а): а удаление повесить на крон.
Поэтому и уточняю, что хочу удалять пользователя из таблицы МУТ в правиле, если время истекло.
Осторожно! Вы общаетесь с новичком
Re: Немного проясните про правила в RBAC
т.е. Запись о пользователе с истекшим баном будет хранится до тех пор пока он снова не зайдет в чат. А если не зайдет? Думаю что данные строки в БД будут вам не к чему.girmate писал(а):Да, крон будет только для удаления старых записей, чтобы освободить БД (например, раз в сутки).za4me писал(а):girmate писал(а): а удаление повесить на крон.
Поэтому и уточняю, что хочу удалять пользователя из таблицы МУТ в правиле, если время истекло.
Re: Немного проясните про правила в RBAC
Ну так для этого же и будет крон. Я же написал:
Да, крон будет только для удаления старых записей, чтобы освободить БД (например, раз в сутки).
Осторожно! Вы общаетесь с новичком
Re: Немного проясните про правила в RBAC
Не надо делать отдельную таблицу. Достаточно поля mutedAt. Если значение больше текущего времени - доступ запрещен. Отдельная таблица потребуется в случае, когда надо будет сохранять все записи, когда и насколько пользователь был заблокирован.
Re: Немного проясните про правила в RBAC
Тогда как организовать сам чат?chesar писал(а):Не надо делать отдельную таблицу. Достаточно поля mutedAt. Если значение больше текущего времени - доступ запрещен. Отдельная таблица потребуется в случае, когда надо будет сохранять все записи, когда и насколько пользователь был заблокирован.
Я думаю будет часа таблица chat (id, user_id, text, created_at) и таблица muted (id, user_id, mute_time). А Вы предложили добавить поле в таблицу основного чата. Но тогда сам чат не очистишь от старых записей, ведь нужно будет хранить этот mute_time в ней.
Осторожно! Вы общаетесь с новичком
Re: Немного проясните про правила в RBAC
В таблицу пользователя, а не чата.girmate писал(а):А Вы предложили добавить поле в таблицу основного чата.
Re: Немного проясните про правила в RBAC
Невыгодно. В проекте ему еще много где нельзя "говорить". То есть есть основной чат, есть сообщения победителя, и так далее. Сильно большую таблицу тягать придется. Но я еще подумаю.ElisDN писал(а):В таблицу пользователя, а не чата.girmate писал(а):А Вы предложили добавить поле в таблицу основного чата.
Осторожно! Вы общаетесь с новичком