我有一个任务管理应用程序,我的任务定义如下:
@Entity
@Data
public class TaskRecord {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(length = 999)
private String name;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<User> users;
}
我想连线,以便用户只能检索他/她在用户组中的任务。
User
对象具有唯一id
,并且我已将Principal
对象配置为具有正确的User
作为成员(成功进行身份验证后)。
将@PostAuthorize
与Spring Expression Language一起使用是一个很好的方法吗?这就是我所拥有的并且它有效,但我对它的质量或价值持怀疑态度。
@Repository
public interface TaskRepository extends CrudRepository<TaskRecord, Long> {
@Override
@PostAuthorize("!returnObject.users.?[id == principal.user.id].empty")
TaskRecord findOne(Long id);
}
也是使用空的最后正确的方法来解决这个问题?感觉有点hackish。
最后,有没有办法用@PreAuthorize
执行此操作,因此我不会将findOne
结果公开给JVM?