Пытаясь реализовать безопасность на основе ролей для веб-приложения, в базе данных есть таблица разрешений, ролей, пользователей и пользовательских ролей (т.е. назначение пользователей ролям).
Каждая роль имеет набор разрешений. Права доступа определяются как перечисление флагов C # со значениями, такими как 0, 1, 2, 4 и т. Д.
В базе данных у таблицы ролей есть поле int, в котором хранятся объединенные флаги разрешений для роли. (Таким образом, мы избегаем отдельной таблицы разрешений (это хорошо или плохо?) И таблицы «один ко многим» для RolePermissions.
В коде я проверяю, есть ли у пользователя доступ, вычисляя действующие разрешения для роли (ей), которой назначен пользователь. В .NET это довольно легко сделать, выполнив логические операции с флагами перечисления.
Итак, мой вопрос:
Есть ли недостаток в том, чтобы делать это таким образом (в отличие от наличия таблицы разрешений и таблицы ссылок RolePermission (которая содержит 1 запись для каждого разрешения, предоставленного роли)?