2

假设我有一个简单的模型,例如“记录”:

@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)对管理员和所有者的访问:换句话说,管理员和创建对象的人,只有他们才能删除它。我不知道如何通过声明性安全性来完成这两项工作。解决这个问题的正确方法是什么?

4

1 回答 1

0

您不能使用声明式安全性来做到这一点,因为没有办法在 @RolesAllowed 中的角色和创建实体的用户之间建立联系。

唯一的方法是程序安全并检查用户是 bean 的创建者还是管理员,或两者兼而有之。

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

于 2012-07-05T06:27:00.550 回答