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 に答える