2013-08-13 3 views
3

Извинения, поскольку я довольно новичок в Джерси. Я пытался найти способ авторизации доступа на уровне экземпляра с использованием ресурсов Джерси, но самая гранулярность, которую я вижу, - это разрешения на роль или статические разрешения на уровне экземпляра. Я немного озадачен тем, что онДинамическое разрешение на уровне экземпляра с Джерси (основано на id)

Чтобы лучше описать, что я имею в виду: предположим, что пользователь владеет группой ресурсов Post - предположительно у этого пользователя есть роль Author. Тем не менее, я не хочу, чтобы каждый Пользователь, являющийся автором, мог изменять каждый пост. Какой самый простой способ контролировать это?

Является ли это видом авторизации, который рассматривается в методе класса ресурсов? Должен ли я создавать настраиваемый фильтр авторизации? Если да, есть ли там какие-то примеры? Я немного озадачен, поскольку это похоже на такой общий случай использования.

Спасибо!

ответ

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 
} 

Там нет конца вариаций на эту тему, но если вы делаете ресурсо- вы, вероятно, захотите сделать это примерно так, где вы получите ресурс с учетом его идентификатора, а затем решите, разрешено ли пользователю выполнять запрошенную операцию.

Смежные вопросы