1

HABTM 関係を介し'User'てモデルに関連付けられているモデルがあります。モデルにクエリを実行して、認証されたユーザーが属するメンバーシップを特定することはできますが、ページの関数呼び出し'Group'でそのデータに簡単にアクセスする方法を概念的に思いつくことができません。isAuthorized()

理想的には、認証方法にリンクし、承認されたユーザーのグループ メンバーシップをキャッシュして、呼び出しをすばやく検索できるようにする方法があることを願っていisAuthorized()ます。これを可能にするケーキの機能はありますか?過去の従業員からこのプロジェクトを継承した後、フレームワークにかなり慣れていないので、私は明らかに推奨事項を受け入れています。

私が収集できたのは、返されたユーザーのグループメンバーシップにアクセスまたは検索できるようにしたいということですAuthComponent::user()が、それは静的メソッドであるため、モデルにアクセスできません。これは可能ですか?

編集:解決策は、ndmとの議論と、アプリケーションが認証を破るように見えることの混合でした。これは、アプリケーションを作成した最後の開発者のせいかもしれませんが、BaseAuthenticate. _findUser($username,$password)「ユーザー」配列とともに「グループ」配列を継承する関数。ログイン時にフェッチされていましたが、モデルの「ユーザー」部分のみが、Auth を呼び出したコントローラーに返されました。

4

1 に答える 1

3

現在ログインしているユーザーのグループを取得するのは簡単です。関連するモデルを取得するように認証ハンドラーを適切に構成するだけで済みます。これは、resuriveまたはcontain設定を使用して行うことができますが、後者は現在ちょっと壊れているようです (少なくとも動作は予想外です)。

使用例recursive

$this->Auth->authenticate = array
(
    'Form' => array
    (
        'userModel' => 'User',
        'recursive' => 1
    )
);

使用例contain

$this->Auth->authenticate = array
(
    'Form' => array
    (
        'userModel' => 'User',
        'contain' => array('Group')
    )
);

containメソッドが機能するためには、UserモデルがContainable! ただし、前述のように、recursive常に使用されているため、これはnull壊れているようであり、整数にキャストされているため、に設定することはできません。したがって、適切な設定 (つまり、再帰 = 1) も提供する必要がありますが、これは、適切な再帰設定を自動的に判断する必要recursiveがある動作の目的を何らかの形で無効にします (別の方法で構成されていない場合)。Containable

とにかく、どちらもオーセンティケータにUserHABTMGroupアソシエーションをフェッチさせます。AuthComponent::user()どちらの方法でも、必要な場所からデータにアクセスできるはずです。

$currentUser = AuthComponent::user();
pr($currentUser['Group']);

編集 (2012 年 7 月 11 日):contain認証ハンドラー構成での使用に関する問題が2.2.4 で修正されnull、設定を渡すことができるようになりましたrecursive

于 2012-11-06T17:08:33.827 に答える