Good morning,
for an existing web application I need to implement "time based login constraints". It means that for each user, later maybe each group, I can define timeslots when they are (not) allowed to log in into the system. As all data for the application is stored in database tables, I need to somehow create a way to model this idea in that way.
My first approach, I will try to explain it here:
Create a tree of login constraints (called "timeslots") with the main "categories", like "workday", "weekend", "public holiday", etc. on the top level, which are in a "sorted" order (meaning "public holiday" has a higher priority than "weekday")
for each top level node create subnodes, which have a finer timespan, like "monday", "tuesday", ...
below that, create an "hour" level: 0, 1, 2, ..., 23. No further details are necessary.
set every member to "allowed" by default
For every member of the system create a 1:n relationship member:timeslots which defines constraints, e.g. a member A may have A:monday-forbidden and A:tuesday-forbidden
Do a depth-first search at every login and check if the member has a constraint.
Why a depth first search? Well, I thought that it may be that a member has the rules:
A:monday->forbidden, A:monday-10->allowed, A:mondey-11->allowed
So a login on monday at 12:30 would fail, but one at 10:30 succeed.
For performance reasons I could break the relational database paradigm and set a flag for every entry in the member-to-timeslots-table which is set to true if the member has information set for "finer" timeslots, but that's a second step.
Is this model in principle a good idea? Are there existing models?
Thanks.