доступ к данным в аутентификации - PullRequest
0 голосов
/ 08 февраля 2012

Я создаю веб-приложение, и некоторые операции защищены для определенных людей.

Я использую защиту sping для контроля доступа, однако я не знаю, как управлять ими, когда глубоко до данныхlevel.

Например, есть две операции list и edit.

И administrator of the company, и administrator of one department могут получить доступ к этим операциям, но данные они могут'list' или 'edit' не совпадают.

administrator of the company может получить доступ ко всем данным компании, в то время как administrator of one department может получить доступ только к данным его / ее отдела.

Итак, мне интересно, как лучше всего реализовать эти требования?

1 Ответ

0 голосов
/ 08 февраля 2012

Самый простой способ - использовать аннотацию PostFilter на сервисном слое.

@Transactional(readonly=true)
@PostFilter("hasPermission(filterObject, 'edit')")
List<DepartamentData> getDepartamenData();

@Transactional
@PreAuthorize("hasPermission(#data, 'edit')")
List<DepartamentData> editDepartamenData(DepartamentData data);

Или другой пример:

@Transactional(readonly=true)
@PostFilter(
  "   hasRole('company_admin')" +
  "|| (hasRole('departament_admin') && filterObject.departament.equals(principal.departament))")
List<DepartamentData> getDepartamenData();
...