0

私は Web アプリケーションを構築していますが、識別された人に対して保護されている操作がいくつかあります。

私はアクセス制御に sping セキュリティを使用していますが、データ レベルにまで深い場合にそれらを制御する方法がわかりません。

たとえば、操作listedit操作の 2 つがあります。

administrator of the companyと の両方がadministrator of one departmentこれらの操作にアクセスできますが、「リスト」または「編集」できるデータは同じではありません。

administrator of the company会社のすべてのデータにadministrator of one departmentアクセスできますが、自分の部門のデータにしかアクセスできません。

では、これらの要件を実装するためのベストプラクティスは何だろうか?

4

1 に答える 1

0

最も簡単な方法 - サービス層で 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();
于 2012-02-08T13:37:06.467 に答える