Ограничения входа в систему на основе времени - PullRequest
1 голос
/ 26 января 2010

Доброе утро,

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

Мой первый подход, я постараюсь объяснить это здесь:

  • Создайте дерево ограничений входа в систему (называемых «временными интервалами») с основными «категориями», такими как «рабочий день», «выходные», «государственный праздник» и т. Д. На верхнем уровне, которые находятся в «отсортированном» порядок (что означает "государственный праздник" имеет более высокий приоритет, чем "день недели")
  • для каждого узла верхнего уровня создайте подузлы, которые имеют меньший промежуток времени, например, «понедельник», «вторник», ...
  • ниже этого, создайте уровень "часа": 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, если для члена задана информация для «более точных» временных интервалов, но это вторая шаг.

Эта модель в принципе хорошая идея? Существуют ли модели?

Спасибо.

1 Ответ

0 голосов
/ 26 января 2010

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

Allowed_Login_Times

  • Weekday_Start
  • Weekday_End
  • Saturday_Start
  • Satruday_End
  • Sunday_Start
  • Sunday_End
  • HOLIDAY_START
  • HOLIDAY_END

Каждый столбец будет целым числом от 0 до 23, представляющим час.

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

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

...