Несколько методов аутентификации или реализовать аутентификацию на основе ролей?

У меня есть проблема, которую я пытаюсь решить как можно более гладко, а также сделать ее максимально безопасной и гибкой!

У меня есть веб-приложение, в котором есть 2 типа пользователей; Конечные пользователи (доверенные пользователи; администраторы!), и клиенты (пользователи переднего плана; не доверенные таким же образом)! Они работают с одними и теми же данными в базе данных, но клиенты могут делать только часть того, что могут делать внутренние пользователи (например, пользователи Salesforce и клиенты «Портал самообслуживания»)!

Я также хочу иметь 2 отдельные таблицы в базе данных для конечных пользователей и клиентов (таблицы называются «Пользователь» и «Клиент», и обе они имеют строку имени пользователя и пароля)...

Должен ли я реализовать это с двумя разными методами аутентификации или мне следует использовать один метод аутентификации и вместо этого использовать роли (тогда я бы пропустил наличие 2 таблиц в базе данных с именем пользователя и паролем и позволил бы всем использовать таблицу пользователей)?


person dr. squid    schedule 02.01.2010    source источник


Ответы (2)


Следующая структура базы данных допускает масштабирование, если вы обнаружите, что вам нужно в конечном итоге поддерживать несколько ролей для пользователей (что часто случается из моего опыта).

CREATE TABLE user (
   id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
   name VARCHAR(120),
   created_ts DATETIME DEFAULT '0000-00-00 00:00:00'
);

CREATE TABLE user_role (
  id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  user_id INT(11) UNSIGNED NOT NULL,
  role_id INT(11) UNSIGNED NOT NULL 
);

CREATE TABLE role (
  id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(125)
);
person Corey Ballou    schedule 02.01.2010

Я бы посоветовал вам использовать одну таблицу и просто настроить роли. Если все сделано правильно, ухаживать за ним будет проще. Конечно это в том случае, если у них есть общие поля, такие как имя, фамилия.

person Adnan    schedule 02.01.2010