我有一个父对象,它属于一个用户(在弹簧安全意义上)。
我想使用spring-data-rest的所有细节,但不必覆盖ton,修改查询等,以便由当前用户进行过滤。
有一种简单的方法吗?
总结一下,我想要这样的事情:
@PreAuthorize("hasRole('USER')")
@RepositoryRestResource(collectionResourceRel = "tasks", path="tasks")
public interface TaskRepository extends PagingAndSortingRepository<Task, Long> {}
...当我转到“/ tasks”时,它只向我显示属于经过身份验证的用户的任务。如果我不需要,我不想使用像“/ users / foo / tasks”这样的网址。
这可行吗?
答案 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);
}
答案 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