4

フィールドが現在ログインしているユーザーのIDに設定されている「作成」ビューでhiddenFieldを設定しようとしています。「springSecurityService.principal.id」プロパティから取得します。

コントローラーから値を渡すのではなく、テンプレートからのみこれを行うことができるかどうか疑問に思っていました。例えば

<%@ page import="grails.plugins.springsecurity.SpringSecurityService" %>
<% def springSecurityService %>

<html>
...
...
<g:hiddenField name="user.id" value="${springSecurityService.principal.id}"/>
...

このコードを試してみましたが、「プリンシパル」プロパティを参照して NullPointer 例外が発生しました。

これを行う方法はありますか、または「作成」メソッドから現在ログインしているユーザーの ID を明示的に渡す必要がありますか?

注: はい、改ざんされた隠しフィールドを使用して POST リクエストを作成するのは誰にとっても簡単なことです。現在ログインしているユーザーが自分の投稿のみを作成、編集、削除できることを確認するために、コントローラー コードにチェックがあります。私の質問は、現在ログインしているユーザーを 3 つの異なるビューに渡すためにコードを入力する必要がないことに関係しています。

4

3 に答える 3

5

現在ログインしているユーザーの ID をビューの非表示フィールドとして保存することは、非常に悪い考えです。Web の仕組みに関する基本的な知識があれば、この値を別のユーザーの ID に置き換えることができるからです。

代わりspringSecurityServiceに、サーバー側で を使用して現在のユーザーを取得する必要があります。このサービスへの参照は、ドメイン クラス、コントローラー、サービス、taglib などで依存性注入を介して取得できます。

class MyController {
  def springSecurityService

  def myAction() {
    def currentUser = springSecurityService.currentUser
  }
}
于 2012-02-09T10:03:09.370 に答える