Разработка модели данных ACL пользователя / группы - PullRequest
3 голосов
/ 18 февраля 2010

Мой вопрос, вероятно, является отголоском вопроса, ранее задаваемого здесь: Как спроектировать объектную модель пользователя с использованием MS Roles & Membership , но я спрашиваю еще раз, поскольку пока нет хорошего ответа, и мой вопрос в любом случае направлен на проектирование модели данных:

Так или иначе, в моем приложении есть пользователи и группы. Пользователь может принадлежать ко многим группам и, конечно, группа может содержать много пользователей. Проблема сейчас, мы знаем только несколько основных групп: пользователь, гость и администратор. В будущем могут существовать группы can-do-X, can-do-Y и потенциально гораздо больше или не больше, чем просто администратор, пользователь и гость. Так что я просто соблазнился легкого подхода. Вот мои мысли о подходах:

Если бы я собирался иметь голую таблицу User, таблицу ролей и другую таблицу, которая имитирует отношение «многие ко многим», это кажется немного перегруженным. Если я правильно понимаю, это будет считаться нормализованным подходом. И наоборот, если я добавлю в таблицу User следующие столбцы, такие как IsAdmin, IsGuest, CanDoX, CanDoY и т. Д., То это будет денормализовано.

Я ищу баланс между сложностью и гибкостью, временем и пространством и т. Д. Пожалуйста, предложите.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2010

Я бы настоятельно рекомендовал нормализованную таблицу USER_ROLE (или ROLE_USER). Он не «перегружен», он правильно и точно отражает ваши требования.

Я работаю в системе баз данных, которая использует именно эту модель; в настоящее время он имеет 250 различных ролей и отлично работает. Наличие 250 столбцов «CanDoX» в таблице пользователей было бы кошмаром, и в любом случае это было бы неприемлемым вариантом, поскольку некоторым суперпользователям разрешено определять новые роли.

1 голос
/ 18 февраля 2010

Вместо нескольких столбцов «CanDoX», «CanDoY» используйте битовую маску для представления разрешений.

...