Я разрабатываю веб-приложение RESTful, которое предоставит систему аутентификации для нескольких других приложений. Другие приложения будут запрашивать это приложение через HTTP и возвращать XML, описывающий прошедших проверку пользователей.
Приложение аутентификации должно отслеживать , какие пользователи могут делать на , какие приложения.
Я разрабатываю схему БД. Ниже мой первоначальный дизайн. (Предположим, что в каждой таблице есть столбец id
.)
applications # The various client apps that will query this auth system.
------------
name
users # Table simplified for discussion
-----
username
password
email
roles
-----
name
application_id
roles_users
-----------
role_id
user_id
Идея в том, что кто-то пытался выполнить административную функцию в приложении «Инвентаризация оборудования». Таким образом, «Инвентаризация оборудования» сказала бы системе аутентификации «получить пользователя с именем пользователя xxx и паролем yyy». Затем он будет смотреть на возвращенный (через ActiveResource) объект User
и проверять, содержит ли его roles
Array Role
с именем "ADMIN", который сам принадлежит объекту Application
с именем "Equipment" Inventory».
Или, возможно, было бы лучше исключить таблицу applications
и иметь гораздо больше ролей, например, "equipment_inventory_admin
", "equipment_inventory_readonly
", "job_tracker_admin
" и т. Д.
Что важнее: нормализация сущности приложения или упрощение структуры таблицы? Возможно, после всего этого набора я только что ответил на свой собственный вопрос, но комментарии или предложения будут приветствоваться.