抱歉,我对泽西岛还很陌生。我一直在尝试找到一种使用 Jersey 资源进行实例级访问授权的方法,但我看到的最精细的是角色或静态实例级权限。我有点困惑,因为它
为了更好地描述我的意思:假设用户拥有一组 Post 资源 - 大概该用户具有角色作者。不过,我不希望作为作者的每个用户都能够修改每个帖子。控制它的最简单方法是什么?
这是在资源类方法中处理的那种授权吗?我应该创建自定义授权过滤器吗?如果是这样,那里有这样的例子吗?我有点困惑,因为这似乎是一个常见的用例。
谢谢!
就示例而言,没有太多示例的原因是它可能取决于您自己的数据模型如何处理它。
举个简单的例子,如果每个帖子都有一个所有者,那么您的资源可能看起来像这样:
@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 的资源,然后决定用户是否被授权携带出请求的操作。