2012-07-05 22 views
2

假设我有一个简单的模型,如“记录”: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中的角色与创建实体的用户之间没有任何联系。

唯一的方法是编程安全性并检查用户是bean还是Administrator的创建者,或者两者兼而有之。

只有您可以使用声明性安全性的部分是列出可以创建此类记录的角色以及管理员角色。之后,必须以编程方式进一步检查当前用户的角色是管理员还是当前用户创建的记录。在任何情况下,声明式安全的完整逻辑然后在程序安全中被复制。

+0

是抛出SecurityException正确的方式来实现这个以编程方式? –