Как реализовать контроль разрешений в Java? - PullRequest
3 голосов
/ 04 ноября 2011

Мы разработали приложение, и нам необходимо реализовать контроль разрешений, что означает, что кто-то может искать только определенные записи в базе данных:

  1. сотрудники могут искать только свои записи.
  2. руководитель может искать записи своего подчиненного.
  3. супервайзер может увидеть кнопку «одобрить», чтобы подтвердить заявку
  4. пока сотрудники могут только подать заявку.

Я знаю безопасность пружин, но на самом деле, как мы можем использовать защиту пружин для реализации вышеуказанной функции?

Мы можем реализовать управление разрешениями с помощью SQL, что означает сначала выбрать его роль, а затем выбрать все записи его подчиненного следующим образом:

select * from table where staffid in (.......)   

Но этот метод кажется слишком грубым и сложным в обслуживании. Таким образом, мой вопрос: есть ли какие-то рамки и практика, которые мы можем использовать для реализации механизма контроля приличных разрешений? Как реализовать контроль разрешений в вашем приложении?

Ответы [ 4 ]

2 голосов
/ 04 ноября 2011

1) сотрудники могут искать только свои записи. 2) руководитель может искать записи своего подчиненного.

Это похоже на правила, которые вы должны реализовать на уровне DAO

3) супервайзер может видеть кнопку «одобрить» для подтверждения заявки

- Этого можно добиться с помощью рендеринга на основе ролей пользовательского интерфейса в JSF

4) пока персонал может подать только заявку.

Здесь могут использоваться перехватчики Spring Security Method: http://static.springsource.org/spring-security/site/docs/3.0.x/reference/secure-object-impls.html

0 голосов
/ 04 ноября 2011

Как вы сказали, сущности "Роль" и "Бизнес-данные" должны оставаться независимыми в БД. Вместо нескольких вызовов базы данных ваши запросы на выборку могут присоединиться к таблице ролей и выбрать только соответствующие данные.

0 голосов
/ 04 ноября 2011

Вам, вероятно, следует взглянуть на ACL Spring Security , если вы еще не решили, что это слишком сложно.

0 голосов
/ 04 ноября 2011

Используя базы данных postgres, вы можете наследовать таблицы от таблиц.то есть:

CREATE TABLE access{
  admin bool default false,
  supervisor bool default false,
  staff_user_id bigint default null,
   ...
}
CREATE TABLE flower(
  flower_id serial,
  name varchar(24)
)inherits (access)

И затем вы можете создать триггер обновления / удаления и разных пользователей-подключений.

Это может быть решением.

...