2

新しいソフトウェア プロジェクトでは、次の要件があります。Web ページには一連のデータを表示する必要があります。このデータは、一部のユーザー (ロールに割り当てられた、つまりマネージャー) によって編集可能であり、他のユーザーのみが表示できます。トリッキーな部分を例で説明します
。ユーザーページは、アドレスデータとアカウント情報で構成されています。アドレスデータは利用者と管理者が編集可能であり、すべての利用者が閲覧できるものとし、アカウント情報は実際の利用者と管理者のみが閲覧できるものとします。

SpringSecurity に関する多くの情報を読みました。URL やメソッド、さらにはドメイン クラスにパーミッションを付与するための非常に優れたフレームワークを提供します。しかし、必要なのはフィールド レベルの ACL です。少なくとも、現時点ではそう思っています。

問題は、Grails を使用してこの問題を解決するにはどうすればよいかということです。

事前にどうもありがとう、

よろしくダニエル

4

4 に答える 4

0

同様の状況があり、gsp で ifUserHasRole タグを使用して適切なプレゼンテーションを実行し、呼び出されるアクションに基づいてルールを適用するフィルターを使用します。たとえば、ユーザーコントローラーでは、管理ロールが保存アクションを呼び出すことを許可するか、user.id が session.user.id と同じ場合にのみ許可します。これが私たちの状況にとって最良の選択肢のように思えました。

于 2010-02-05T14:24:49.510 に答える
0

次のような ACL クラスを作成するのはどうでしょうか。

class ACL(val entry: Entry*) {
  def isAccessAllowed(subject: String, permission: String): Boolean = ...
}

class Entry(val subject: String, val permission: String*)

利用方法:

new ACL(
  new Entry("dave", "read", "write"), 
  new Entry("linda", "read")
)

(この例は Scala で書かれています。この場合の方が表現力が高いと感じたからですが、Groovy に簡単に移行できるはずです。)

次に、ACL オブジェクトを保護対象のオブジェクトに接続します。

于 2010-02-05T16:00:50.357 に答える
0

Spring Security (Acegi Plugin) は、間違いなく Grails を使用する方法です。

次のような役割ごとに異なるページを作成できるようにする、使用できるtaglibがあります。

<g:ifUserHasRole roles="ROLE_ADMIN">
html code for extra fields
</g:ifUserHasRole>
于 2010-01-23T18:29:58.993 に答える
0

私は、GORMがドメインクラスに注釈を付ける方法をエミュレートして、ドメインクラスでエンコードします(static access = [field1: "ROLE_USER", field2: "ROLE_ADMIN,ROLE_USER"]例として)。次に、コントローラーが特定のユーザーに対してそれらを編集するために使用できるメソッドを構築します。そのメソッドは、ドメイン クラスの注釈を使用して、それを編集する方法を決定できます。次に、プラグインと同じように、各ドメイン クラスにメタプログラミングします。

同様に、params のデータ バインディングをドメイン クラスに制限する反対のメソッドを記述し、独自のデータ バインディング ユーティリティ メソッドを記述してから、それを各ドメイン クラスにもメタプログラミングします。

次に、instance.redact(user)orinstance.bindData(params, user)を使用して、必要なことを行うことができます。これは、実質的に宣言的な構文です。

于 2010-01-23T19:52:24.640 に答える