ご存知のように、オブジェクトにアクセスする方法の 1 つは、Spring セキュリティの acl メソッドを使用することです。このメソッドでは、一連の設定を実行して必要なデータを保存した後、次のメソッドを使用して、メソッドで何かを行うためのユーザーのアクセスを確認します。次の図に示す構造のプロジェクトを考えてみましょう。このグラフでは、各ユーザーは 1 つの部門へのアクセス権を持っているため、情報がシステム上で作成される場合は、このアクセス権に基づいている必要があります。たとえば、ユーザーは、承認された部門に属していない作業者のジョブを登録できないようにする必要があります。
public class Department {
String departmentName;
List<Employee> employeeList;
}
public class Employee {
Department department;
List<Job> jobList;
}
public class Job {
String jobTitle;
Employee employee;
}
public class User {
String username;
List<Department> departmentList;
}
@Transactional
@PreAuthorize("hasPermission(#job.employee.department.id, ‘Department’, 'write')")
public void save(Job job) {
super.save(job);
//TODO
}
UI 層に送信される情報は JSON として送信されると考えてください。この場合、ジョブ挿入の場合、JSON は次のようにする必要があります。
{
jobTitle:”CTO”,
employee:{
id:1
}
}
この情報はコントローラ層で Job オブジェクトに変換され、サービス層で save メソッドが呼び出されます。この場合、job.employee.department.id が nullであるため、指定されたアクセスは機能していません。 これがどうあるべきかを判断するには、id に基づいてコントローラーにこのオブジェクトをロードする必要がありますか? ACL以外の方法はありますか?