Доброе утро,
для существующего веб-приложения мне нужно реализовать «ограничения входа в систему на основе времени». Это означает, что для каждого пользователя, позже, возможно, для каждой группы, я могу определить временные интервалы, когда им (не) разрешено входить в систему. Поскольку все данные для приложения хранятся в таблицах базы данных, мне нужно каким-то образом создать способ для моделирования этой идеи таким образом.
Мой первый подход, я постараюсь объяснить это здесь:
- Создайте дерево ограничений входа в систему (называемых «временными интервалами») с основными «категориями», такими как «рабочий день», «выходные», «государственный праздник» и т. Д. На верхнем уровне, которые находятся в «отсортированном» порядок (что означает "государственный праздник" имеет более высокий приоритет, чем "день недели")
- для каждого узла верхнего уровня создайте подузлы, которые имеют меньший промежуток времени, например, «понедельник», «вторник», ...
- ниже этого, создайте уровень "часа": 0, 1, 2, ..., 23. Никаких дополнительных подробностей не требуется.
- установить для каждого члена значение "Разрешено" по умолчанию
- Для каждого члена системы создайте
1:n
отношение member:timeslots
, которое определяет ограничения, например, член А может иметь A:monday-forbidden
и A:tuesday-forbidden
- Выполните поиск в глубину при каждом входе в систему и проверьте, есть ли у члена ограничения.
Почему поиск в глубину? Ну, я подумал, что, может быть, у члена есть правила:
A:monday->forbidden
, A:monday-10->allowed
, A:mondey-11->allowed
Таким образом, вход в понедельник в 12:30 будет неудачным, но вход в 10:30 будет успешным.
По соображениям производительности я мог бы сломать парадигму реляционной базы данных и установить флаг для каждой записи в таблице member-toslotststs, который устанавливается в значение true, если для члена задана информация для «более точных» временных интервалов, но это вторая шаг.
Эта модель в принципе хорошая идея? Существуют ли модели?
Спасибо.