Приложение
Мне нужно реализовать веб-приложение, которое будет использоваться разными пользователями. Каждый пользователь имеет разные привилегии для разных таблиц, например,
Пользователь A может видеть поля 'name' и 'address' из таблицы
Student
Пользователь B может видеть поля «имя» и «номер телефона», но не «адрес» из таблицы
Student
Пользователь C может видеть и изменять все поля, упомянутые выше
У меня будет что-то на уровне пользовательского интерфейса, чтобы ограничить определенный доступ, например, скрыть кнопку «редактировать» для пользователей, у которых нет прав на изменение записей. Тем не менее, я думаю, что у меня должно быть что-то на более низком уровне (возможно, на уровне базы данных) только для обеспечения безопасности данных.
Проблема
Я использую Hibernate, JBoss, DB2 и Struts для своего приложения. Я думаю, что я должен использовать JBoss LoginModule некоторого вида, который аутентифицирует пользователя по базе данных с пользователем / паролем / ролями (но я могу ошибаться (?)). Я провел некоторые исследования и предложил следующие варианты, но ни один из них не подходит для моего случая. Я думаю, что это очень распространенная проблема доступа к данным в многопользовательских веб-приложениях. Может ли кто-нибудь, пожалуйста, указать мне правильное направление? Заранее спасибо!
Используйте тег 'grant' в hibernate.cfg.xml
с прослушивателями событий JACC. Это может установить разрешения «вставить», «обновить» и «прочитать» для всех объектов гибернации. Тем не менее, что, если мне нужны более точные элементы управления? Мне нужно установить разрешения на определенные поля, а не весь объект. http://www.hibernate.org/hib_docs/v3/reference/en-US/html/objectstate-decl-security.html
Ограничение разрешений на метод получения / установки каждого ejb. Если я правильно понял, это требует ручной настройки каждого компонента для каждого профиля пользователя, что для меня нереально.
Разрешения метода EJB
Код DAO для проверки прав пользователей. Сверните мою собственную служебную функцию, которая проверяет гигантскую таблицу разрешений каждый раз, когда вызывается определенный метод DAO, чтобы определить, может ли вошедший в систему пользователь выполнить действие или нет.
Используйте «перехватчик» и «события» в Hibernate. Определите конкретные события «onLoad», «onSaveorUpdate» и т. Д. Для каждого класса. Могу ли я указать уровень разрешений для отдельных полей в этом случае? http://www.hibernate.org/hib_docs/v3/reference/en-US/html/objectstate-events.html
Возможно, я лаю не на том дереве. Все вышеперечисленное кажется трудоемким и не очень умным. Ни один из вышеперечисленных вариантов не дает мне программных способов изменения разрешений пользователей во время выполнения, что было бы полезно, когда пользователь уровня администратора хочет предоставить другому пользователю больший контроль над этим приложением.
Что такое хороший способ управления доступом к данным здесь