限制用户在Spring中使用Spring Expression Language访问数据

时间:2017-08-22 00:36:58

标签: spring spring-boot

我有一个任务管理应用程序,我的任务定义如下:

@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?

0 个答案:

没有答案