道歉,因为我对泽西很新。我一直试图找到一种使用Jersey资源进行实例级访问授权的方法,但我看到的最细粒度是角色或静态实例级权限。我有点困惑,因为它
更好地描述我的意思:假设用户拥有一组Post资源 - 可能这个用户具有Author作用。但是,我不希望作为作者的每个用户都能够修改每个帖子。控制它的最简单方法是什么?
这是在资源类方法中处理的那种授权吗?我应该创建自定义授权过滤器吗?如果是的话,那里有这样的事情的例子吗?我有点困惑,因为它似乎是一个常见的用例。
谢谢!
答案 0 :(得分:4)
在示例方面没有太多的原因是,关于如何处理这个问题可能取决于你自己的数据模型。
举一个简单的例子,如果每个帖子都有一个所有者,那么你的资源可能看起来像这样:
@PUT
@Path("{id: [A-Fa-f0-9]+}")
@Consumes(MediaType.APPLICATION_JSON)
public T update(@Context HttpServletRequest request, final T item, @PathParam("id") final String id)
{
final Post post = getPostbyId(id);
if (!post.allowedToUpdate(request.getUserPrincipal())
{
throw new UnauthorizedException();
}
// Authorized, carry on
}
此主题没有变化的结尾,但如果您正在进行资源级授权,您可能希望以这种方式执行此操作,在此情况下获取给定其ID的资源,然后确定用户是否有权进行所要求的操作。