2012-07-05 5 views
2

Предположим, у меня есть простая модель, например, «Record»:Java EE 6 авторизации: ограничение на владельца

@Model 
public class Record { 
    private Principal owner; // presume getter/setters as well 
} 

Тогда я хочу, чтобы иметь простой EJB, который контролирует создание и удаление записей. Ради аргумента давайте беспокоиться только об удалении:

@EJB 
@Named 
@Stateless 
public class RecordMgr { 
    @PersistenceContext private EntityManager em; 

    public void delete(Record r) { 
    em.remove(r); 
    } 
} 

Я хочу, чтобы ограничить доступ к RecordMgr#delete(Record r) для администраторов и владельца: иными словами, администраторов и людей, которые создали объект, и только их, можно удалить Это. Я не вижу, как выполнить обе эти задачи с декларативной безопасностью. Каков правильный подход к этой проблеме?

ответ

0

Вы не можете сделать это с декларативной защитой, потому что нет способа установить связь между ролью в @RolesAllowed и пользователем, создавшим объект.

Только путь - это программная защита и проверка того, что пользователь является создателем компонента или администратором, или и тем, и другим.

Только часть, в которой вы можете использовать декларативную защиту, - это список ролей, которые вслух создают такую ​​запись и роль администратора. После этого необходимо программно проверить, что роль текущего пользователя является администратором или текущей созданной пользователем записью. В любом случае целая логика декларативной безопасности затем дублируется в программной безопасности.

+0

Выбрасывает SecurityException правильный способ реализовать это программно? –