---------------------
1 | 15
2 | 1
< /code>
разрешения < /strong> < /p>
permission_id | permission_name
-----------------------
1 | Read
2 | Write
4 | Execute
8 | Delete
< /code>
, а затем проверить, что пользователь имеет разрешение, я бы использовал операцию: < /p>
$user_permission & $permission_id
< /code>
Основные преимущества, которые я вижу, это: < /p>
- Trivial для установки, получения и проверки разрешений < /li>
Меньше хранения (без детской базы данных; нет дополнительных строков на пользователь). См. Дочерняя таблица, и для этого я бы использовал следующую структуру базы данных: < /p>
Пользователи < /strong> < /p>
user_id
-------
1
2
< /code>
разрешения < /strong> < /p>
permission_id | permission_name
-----------------------
1 | Read
2 | Write
3 | Execute
4 | Delete
< /code>
user_permissions < /strong> < /p>
user_id | permission_id
-----------------------
1 | 1
1 | 2
1 | 3
1 | 4
2 | 1
< /code>
, а затем проверить, что пользователь имеет разрешение, которое я бы использовал операцию (где $ user_permission < /code> является массивом разрешения_ид < /code> s): < /p>
in_array($permission_id, $user_permission);
< /code>
Основными преимуществами, которые я вижу, являются: < /p>
может использовать ограничения иностранного ключа < /li>
тривиальные для перечисления пользователей < /li>
позволяет гораздо большее количество проживания < /br />
/>The main drawbacks I see to this are:
Greater storage (child database; additional rows per user permission) - Setting and getting permissions slightly more complicated
Question
Какой из них будет лучшим вариантом? Я вижу преимущества и недостатки для каждого и не уверен, что было бы более подходящим. Хотя я знаю, что контекст, вероятно, играет роль; Итак, в каких ситуациях будет побитовым операциям лучше и в которых будет лучше детского стола для многих ко многим? Или есть третий вариант, о котором я не знаю? Несколько разбитых разрешений кажутся довольно распространенными, поэтому я предполагаю, что есть веская причина для их использования.
Подробнее здесь: https://stackoverflow.com/questions/155 ... hild-table