假设我有一个简单的模型,例如“Record”:
@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 :(得分:0)
您无法使用声明式安全性,因为无法在@RolesAllowed中的角色与创建实体的用户之间建立连接。
唯一的方法是编程安全性并检查用户是bean或Administrator的创建者,还是两者兼而有之。
只有可以使用声明性安全性的部分才是列出大声创建此类记录的角色和管理员角色。之后,必须以编程方式进一步检查当前用户的角色是管理员还是当前用户创建的记录。无论如何,声明性安全的整个逻辑在程序安全性中会被复制。