У меня есть таблица пользователей
ID status
1 5
2 50
3 60
4 999
5 5
Каждый пользователь в таблице имеет свой статус. Статус означает как:
5 = normal user
50 = article writer
60 = blog writer
999 = administrator
Пока у меня не было нормальной линейной системы возрастающих значений состояния, все было в порядке. Если страница была доступна только для администраторов, я выполнял проверку сеанса для статуса 999, если страница была доступна пользователю с минимальным статусом, я проверял, если статус> 2 и т. Д. ... Он работает без доступа к базе данных (у меня есть статусы, извлеченные в сеансе переменные, поэтому mysql запрашивается только тогда, когда время сеанса истекло и при первом посещении).
Теперь у меня проблема с авторами статей и администраторами блогов ... Есть проблема с концепцией. Я могу применять только = или> к статусам, поэтому разрешить только один из статусов или любой статус, который выше. Администратор может видеть все, поэтому он имеет наибольшее число.
Теперь я хочу, чтобы пользователь 2 также мог быть автором блога, поэтому фактически иметь 2 точные роли. Ему нужно иметь статус 50 и 60 одновременно. И 60 - это НЕ ВЫСШЕЕ, потому что я не хочу, чтобы каждый автор блога мог видеть администрацию статьи. Что теперь делать?
Конечно, я могу поместить в столбцы состояния 50,60, а затем разобрать правильный столбец, но я потеряю столбец чисел, и я считаю, что неправильно использовать поле столбца для более чем одного значения.
Логическим способом было бы создать таблицу состояния, такую как
IDuser status
2 50
2 60
3 60
1 5
5 5
4 999
Поэтому, когда я нахожусь на странице блога, я могу запросить точный необходимый статус, и один пользователь может иметь более одной роли ...
НО ... Как я уже писал, у меня есть статус в переменной сеанса, использующей классический ASP, чтобы не запрашивать базу данных на каждой странице. Если я создаю другую таблицу состояния, мне нужно будет запрашивать таблицу состояния на каждой странице, чтобы увидеть, включена ли роль для этого пользователя. Я хотел бы как-то хранить эту информацию в памяти, но я не уверен, как.
А может, есть какой-то другой способ?