Я рассматриваю лучший способ разработать систему разрешений для «админского» веб-приложения. У приложения, вероятно, будет много пользователей, каждому из которых может быть назначена определенная роль; некоторым из этих пользователей может быть разрешено выполнять определенные задачи вне роли.
Я могу придумать два способа спроектировать это: первый, с таблицей «разрешений» со строкой для каждого пользователя и логическими столбцами, по одному для каждой задачи, которые назначают им разрешения для выполнения этих задач. Нравится:
User ID Manage Users Manage Products Manage Promotions Manage Orders 1 true true true true 2 false true true true 3 false false false true
Еще один способ, который я придумал, - это использовать битовую маску для хранения этих разрешений пользователей. Это ограничило бы количество задач, которыми можно было бы управлять, до 31 для 32-битного целого числа со знаком, но на практике у нас вряд ли будет более 31 конкретной задачи, которую может выполнить пользователь. Таким образом, схема базы данных будет проще, и нам не придется менять структуру таблицы каждый раз, когда мы добавляем новую задачу, для которой потребуется контроль доступа. Нравится:
User ID Permissions (8-bit mask), would be ints in table 1 00001111 2 00000111 3 00000001
Какие механизмы здесь обычно используют люди и почему?
Спасибо!