0

SpringSecurityCore プラグインと一緒にセットアップした基本的な Grails 2 アプリケーションがあります。これはうまく機能しているようです。ただし、拡張クラスを使用して User.groovy ファイルに追加のプロパティを追加しようとすると、コントローラーでそれらのプロパティを参照できないようです。

この問題をよりよく説明するために、User.groovy を拡張する私の基本的なクラスを見てください。

UserInfo.groovy:

class UserInfo extends User {

String firstname
String lastname
}

現在のユーザーの名を参照したいページで、次のようにメソッドを記述しています。

def index() { 


        def uname = springSecurityService.currentUser.username
        def firstname = springSecurityService.currentUser.firstname

        render uname

    }

これは、ユーザー名のレンダリングには問題なく機能します。これは、ユーザー名がベースの User.groovy ファイルで参照されているためだと思います。

class User {

transient springSecurityService

String username
String password

ただし、firstname を springSecurityService.currentUser.firstname の一部として定義しようとすると、上記の「def index()」メソッドは失敗します。

基本の User.groovy クラスに追加のプロパティを挿入すると、springSecurityService.currentUser.[property] を介してそれらを参照できます。

これを説明するには:

class User {

transient springSecurityService

String username
String password
    String firstname
    ...

その後、前述の index メソッドでユーザーの firstname プロパティを参照できます。

基本 User クラスに値を挿入せずに、User の拡張プロパティを参照することはできますか? ここでの私の目標は、 UserInfo.groovy ファイルで参照されている値を呼び出すことができるようにしながら、 User クラスをできるだけきれいに保つことです。

よろしくお願いいたします。

4

3 に答える 3

2

User 情報の一部のプロパティを別のドメインに配置する必要があり、それらのプロパティに springSecurityService.currentUser から引き続きアクセスできるようにする場合は、独自のUserDetailsS​​erviceを実装して UserInfo プロパティを User にパッケージ化する必要があります。

于 2012-10-18T02:48:16.627 に答える
0

クラスを拡張する場合User、SpringSecurity プラグインは拡張されたクラスについて何も認識しませんUserInfo

を呼び出すと、 not of -springSecurityService.currentUserのインスタンスが取得されるため、プロパティはありません。UserUserInfofirstname

いくつかの新しいプロパティを追加したくない場合は、クラスUserへの参照を追加できます。UserInfo

class UserInfo {
    static belongsTo = [user: User]

    String firstname
    String lastname
    ...
}

class User {
   ...
   UserInfo userInfo
   ... 
}

この参照により、データベースに追加のテーブルが追加されることに注意してください。これにより、ユーザー インスタンスにアクセスする場合に追加の結合操作が発生します。

于 2012-10-17T06:31:06.517 に答える
0

Spring Security プラグインを最初にインストールして User クラスを作成したとき、デフォルトのユーザー クラスとして使用するクラスを指定するいくつかのプロパティが Config.groovy に追加されているはずです。デフォルトの User クラスを拡張する場合は、これを反映するように Config.groovy のプロパティを更新する必要があります。更新 (または存在しない場合は追加) するために探しているプロパティは次のとおりです。

grails.plugins.springsecurity.userLookup.userDomainClassName = 'your.package.UserInfo'

このページには、デフォルトのいずれかを拡張/更新する場合に更新する必要があるユーザーおよびロール/権限に関連するプロパティがいくつかあります。

于 2012-10-17T07:11:45.000 に答える