如何将资源限制为当前用户拥有的资源

时间:2015-09-10 07:36:50

标签: spring spring-data-rest

我有一个父对象,它属于一个用户(在弹簧安全意义上)。

我想使用spring-data-rest的所有细节,但不必覆盖ton,修改查询等,以便由当前用户进行过滤。

有一种简单的方法吗?

总结一下,我想要这样的事情:

@PreAuthorize("hasRole('USER')")
@RepositoryRestResource(collectionResourceRel = "tasks", path="tasks")
public interface TaskRepository extends PagingAndSortingRepository<Task, Long> {}

...当我转到“/ tasks”时,它只向我显示属于经过身份验证的用户的任务。如果我不需要,我不想使用像“/ users / foo / tasks”这样的网址。

这可行吗?

2 个答案:

答案 0 :(得分:1)

我建议@Override各个方法以保护实体。

@PreAuthorize("hasRole('USER')")
@RepositoryRestResource(collectionResourceRel = "tasks", path="tasks")
public interface TaskRepository extends PagingAndSortingRepository<Task, Long> {
    @PostAuthorize("returnObject.owner.username == principal.username")
    Task findOne(Long id);
}

http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#access-control-using-preauthorize-and-postauthorize

答案 1 :(得分:1)

您可以在控制器层中执行此操作如果父对象封装了用户信息,请在Web服务方法上使用class IntegerConcatComparer : IComparer<int> { public int Compare(int x, int y) { var xy = int.Parse(x.ToString() + y.ToString()); var yx = int.Parse(y.ToString() + x.ToString()); return xy - yx; } } public class Program { static void Main(string[] args) { var InputArrays = new int[] { 65, 546, 548, 54 }; var Output = PossibleSequence(InputArrays); Console.WriteLine("\n{0} ", Output); } static string PossibleSequence(int[] ints) { var res= ints.OrderBy(sap => sap, new IntegerConcatComparer()); var reveresedOrder= res.Reverse().ToArray(); return string.Join(" ", reveresedOrder); } } 注释...希望它能为您提供帮助

@PostAuthorize