Яка основна модель створення бази даних з користувачами та групами?


9

Я намагаюся знайти найкращий спосіб для базової системи безпеки для веб-сайту. Я знаю, що хочу користувачів та груп.

Я думав, що маю:

user_table
user_id
user_name
...

group_type
group_id
group_name
parent_id
...

group_table
id
user_id
group_id

Перший - це користувач, другий - група, а третій - посередницька таблиця, яка з'єднує їх два. Один користувач має багато груп.

Це звучить нормально?


Крім імен. Ваша GROUP_TYPEтаблиця повинна бути названа GROUPчимось подібним, і вона GROUP_TABLEмає посилатися як на користувачів, так і на групи, оскільки саме це пов'язує.
Адам Муш

@adam не дозволяє груповим таблицею робити це з user_id та group_id?
Джоні

4
@AdamMusch Це не повинно називатися GROUP, оскільки це зарезервоване слово. Таблиці та стовпці ніколи не повинні називатися зарезервованими словами
Philᵀᴹ

1
@Phil погодився. Ви також можете назвати таблицю SELECTта поле, FROMщоб ви могли мати запит на зразокSELECT [FROM] FROM [SELECT]
JNK

2
Спробуйте зателефонувати базовим особам на кшталт "app_user" та "app_role"
ConcernedOfTunbridgeWells

Відповіді:


17

Традиційний спосіб моделювати це за допомогою шаблону, який називається Рольова безпека .

Ідея полягає не лише у створенні груп користувачів, а й у групах дозволів. Ось як виглядає візерунок:

ERD на основі ролі безпеки

Зауважте, що ви хочете уникати зарезервованих слів для імен таблиць, тому не називайте свої таблиці точно так, як показано на схемі.

Як це працює, це те, що ваші групи або ролі мають не лише список призначених їм користувачів, а й список дозволів, призначених їм. Це дозволяє керувати таблицею як тих, хто вміє робити, так і того, що вони можуть робити, якщо ви слідуєте за мною.


Але що робити, якщо мій користувач має якусь роль, наприклад, менеджер чи якусь іншу, і чомусь тому ж користувачеві потрібен і один конкретний дозвіл (що не в цій ролі, ані в будь-якій іншій ролі)?
levi

@levi - Якщо це трапиться, то один із способів впоратися з цим - це зробити особливу роль на зразок "Спеціальні дозволи Боба" , що трохи неприємно, але це вирішує проблему, доки у вас не буде занадто багато винятків, наприклад це. Цілком можливо, що те, що ви вважаєте індивідуальним винятком, може насправді бути тонкою новою роллю, яку ви не розглядали. Що відбувається, коли Боб кине? Чи потрібна також заміна Боба, що має винятковий дозвіл? Якщо так, то ви насправді маєте роль з одним членом, не виняток.
Джоел Браун

@levi - Інша можливість полягає в тому, що вам дійсно потрібно мати суміш прав людини та ролей. У такому випадку ваша ROLEтаблиця може бути підтипова на індивідуальні та групові типи, де тип групи має нуль до багатьох членів, а індивідуальний тип має саме один член. Як ви виконувати ці правила кардинальності, залежить від вас. Це можна зробити декларативно у вашій схемі бази даних, і в цьому випадку вам потрібно трохи змінити зображену схему. Або ви можете використовувати логіку програми, і в цьому випадку ваша схема все ще виглядає як я зображена вище.
Джоел Браун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.