2013-09-27 3 views
0

Скажите, что у меня есть приложение, которое управляет конфиденциальными данными, такими как записи о клиенте клиентов. После долгих успехов я привлекаю многих клиентов, некоторые из которых являются знаменитыми людьми. У меня теперь много сотрудников, которые используют это приложение. Тем не менее, я хочу защитить личность упомянутых «знаменитых» лиц, только предоставив привилегированным менеджерам учетных записей доступ к «известным» людям.Стратегия фильтрации специальных результатов на основе разрешения пользователя

Данные для этого приложения хранятся в базе данных отношений, которая развивалась в течение многих лет. Стол клиентов имеет «знаменитый» столбец для указания записей известных людей; таблица «users» имеет столбец «привилегированный», который указывает, что сотрудник имеет доступ к записям известных людей; предположим, что оба являются логическими.

Я мог бы разграбить весь слой данных, добавив туда где предложения для всех запросов; Я также должен начать отправлять флаг, указывающий, является ли пользователь «привилегированным» или нет. Это массовое мероприятие, но есть ли другой вариант?

Я ищу общий совет, но мое приложение написано на платформе Java.

Обновление: Я знаком с контролем доступа на основе ролей и тем, как пользователи, группы, роли, разрешения, права и т. Д. может быть размещен с хорошей нормой, но в настоящее время это не вариант. Скорее всего, я буду реорганизовать и адаптировать текущую систему, чтобы использовать такую ​​инфраструктуру, как Spring Security.

+0

Обработка прав пользователей - это больше задание для слоя «контроллер», уровень данных может быть не лучшим вариантом для обеспечения безопасности. Как вы управляете аутентификацией пользователя/авторизацией? Добавьте некоторые детали. – zerologiko

+0

Если вы находитесь в США, я думаю, вам нужно быть уверенным, что вы находитесь в соблюдении HIPPA. Это немало. – AllInOne

+0

@zerologiko Оба authn/authz являются домашними. Почтовый логин, аутентифицированный объект Принципа, а также объект UserPermission хранится в HttpSession для опроса большинством контроллеров (да, это веб-приложение). – i3ensays

ответ

2

Общий случай заключается в том, что разные пользователи должны иметь доступ к разным клиентам. По моему опыту, это лучше всего реализовать с помощью ролей. Разным пользователям могут быть назначены разные роли. Доступ к данным сопоставляется с ролями.

В вашем случае у вас может быть роль Менеджера и роль сотрудника. Менеджеры имеют доступ ко всем записям. Сотрудники имеют доступ только к менее чувствительным записям. Эта ассоциация может управляться через таблицы в базе данных: например, role, user_role и client_role. user_role сопоставляет пользователей с ролями, а client_role будет определять, какие роли имеют доступ к информации о клиенте.

Я был бы осторожен в добавлении «знаменитой» колонки, которую вы описываете. Опасность в том, что в будущем по мере появления новых бизнес-правил вам понадобится больше столбцов и новый код на уровне данных для реализации этой логики. Когда вы управляете доступом через роли, у вас есть общий механизм, который имеет тенденцию быть более расширяемым, даже если он немного больше работает в краткосрочной перспективе.

0

Общий ответ на ваш общий вопрос: посмотрите на RBAC (управление доступом на основе ролей). В Java у вас может быть какой-то пользовательский класс, которому назначены роли. Каждая роль имеет набор конкретных разрешений (может быть перечисление). Затем перед каждой защищенной операцией вы должны проверить, имеет ли текущий пользователь соответствующее разрешение.

0

Я думаю, что вы находитесь на правильном пути: безопасность - это сквозная проблема, связанная с «аспектом», которая каким-то образом должна быть централизована.

Чтобы конкретный ответ на ваш вопрос, вы должны пойти в рамки + taglibrary, тот, который вы упомянули, Spring Security - идеальный выбор, который будет оплачивать усилия в долгосрочной перспективе. Вы также можете использовать Аспектно-ориентированное программирование (АОП) для централизации некоторых аспектов, поскольку Spring включает AspectJ.

Но вам по-прежнему необходимо ввести понятие о роли и разрешениях .. См. Статью this.

Смежные вопросы