Я собирался задать здесь вопрос о том, приемлем ли мой дизайн для некоторых таблиц базы данных пользователей / ролей, но после некоторых исследований я наткнулся на этот вопрос:
Каков наилучший способ обработки нескольких типов разрешений?
Это звучит как инновационный подход, поэтому вместо таблицы «многие ко многим отношениям users_to_roles» у меня несколько разрешений, определенных как один десятичный знак (я предполагаю, что это тип данных int). Это означает, что все разрешения для одного пользователя находятся в одной строке. Это, вероятно, не будет иметь смысла, пока вы не прочитаете другой вопрос и не ответите
Я не могу разобраться с этим. Может кто-нибудь объяснить, пожалуйста, процесс преобразования? Звучит «правильно», но я просто не понимаю, как я преобразую роли в десятичную, прежде чем она попадет в БД, и как она конвертируется обратно, когда выходит из БД. Я использую Java, но если вы окунетесь в это, это было бы здорово.
Вот исходный ответ на случай, если другой вопрос будет удален:
"Лично я иногда использую помеченное перечисление разрешений. Таким образом, вы можете использовать побитовые операции И, ИЛИ, НЕ и XOR над элементами перечисления.
[Flags]
public enum Permission
{
VIEWUSERS = 1, // 2^0 // 0000 0001
EDITUSERS = 2, // 2^1 // 0000 0010
VIEWPRODUCTS = 4, // 2^2 // 0000 0100
EDITPRODUCTS = 8, // 2^3 // 0000 1000
VIEWCLIENTS = 16, // 2^4 // 0001 0000
EDITCLIENTS = 32, // 2^5 // 0010 0000
DELETECLIENTS = 64, // 2^6 // 0100 0000
}
Затем вы можете объединить несколько разрешений, используя побитовый оператор AND.
Например, если пользователь может просматривать и редактировать пользователей, двоичный результат операции - 0000 0011, который преобразуется в десятичное число - 3.
Затем вы можете сохранить разрешение одного пользователя в одном столбце вашей базы данных (в нашем случае это будет 3).
Внутри вашего приложения вам просто нужна еще одна побитовая операция (ИЛИ), чтобы проверить, есть ли у пользователя определенное разрешение или нет. "