0

ユーザー認証アーキテクチャを作成する方法を理解しようとしています。ユーザーごとに通常の 1 つのアカウントの代わりに、1 つのアカウント (電子メールとパスワード) を持つシステムを開発しています。このアカウントは、さまざまな小さなアカウント (異なる ID、表示名、アクセス ロールを持つ... 基本的には別のテーブル) にリンクされています。データベースで)。これらの小さなアカウント、または「サブ」アカウントは、互いに完全に独立しています。

現在、「マスター」アカウントにログインできる場所まで機能しており、さまざまなサブアカウントを切り替えるために使用されるユーザーメニューにドロップダウンリストがあります。ただし、アカウントを切り替えて永続的に維持する方法に固執しています。

CWebUser を拡張しsetSub($id)、切り替え先のサブアカウントの ID を取得するメソッドを追加し、$currentSub変数をサブアカウント モデルに設定しようとしましたが、うまくいかないようです...どこから始めればよいかわかりませんこれとともに。

私が本当に必要としているdisplayNameidは、永続化するサブアカウントと、サイトの任意のページでこれらの値を変更する方法だけです。次に、パーソナライズされたページで ID を使用して、そこから移動できます ( として設定されている「マスター」アカウントの ID を使用するのではなくYii::app()->user->id)。変数を設定して永続化する方法がわからないだけだと思います。

4

1 に答える 1

0

説明どおりにすべてを正しく行っているように見えますが、実際のコードがなければ、何を混同したのかわかりません。これが私が私のために動作することを確認したものです:

コンポーネント フォルダーに、次のコードを含む WebUser.php という名前の新しいファイルを配置します。

class WebUser extends CWebUser{

    public function getSubId(){
        return Yii::app()->user->getState('subId');
    }

    public function setSubId($id){
        Yii::app()->user->setState('subId',$id);
    }
}

次に、config/main.php ファイル'class'=>'WebUser'で、ユーザー コンポーネントに次の行を追加します。

// application components
'components'=>array(
    'user'=>array(
        // enable cookie-based authentication
        'class'=>'WebUser',
        'allowAutoLogin'=>true,
    ),
...

上記で、次のコードで動作することを確認しました。

Yii::app()->user->subId = 10;
echo Yii::app()->user->subId;

そして、それは実際に画面に 10 をエコーし​​ました。WebUser のロジックを複製して、サブのdisplayName属性に対して同じことを行うことができます。次に、スクリプトでこれらの値を適切な場所に設定するだけで、すべて設定されます。

更新:後の視聴者のために私のコードを修正しました。上記は機能し、現在も持続するはずです。以前、WebUser オブジェクトで変数を定義しようとしましたが、明らかにそれは持続できませんでした。代わりに、WebUser オブジェクトを setState/getState メソッドのラッパーとして使用すると、必要に応じて機能します。

于 2012-11-10T09:11:08.680 に答える