0

Configure::read具体的なアクションにアクセスするためのアクセス許可を確認するために、次のように関数を使用するコードをインターネットでいくつか見ました。

public function action1(){
    if(!Configure::read('isAdmin')){
        $this->redirect(array('controller' => 'depots', 'action' => 'status'));
    }

    //whatever
}

この目的のために and を使用することと and を使用することConfigure::readの違いは何ですか?Configure:write$this->Session->read()$this->Session->write()

それを確認するより良い方法はどれですか?

ありがとう。

4

2 に答える 2

2

認証コンポーネントの使用

組み込みのAuthComponentを使用すると、CakePHP は現在ログインしているユーザーの詳細をセッション内に保存します。

現在ログインしているユーザーのプロパティを取得する

ログインすると、AuthComponent を介して Used (role_id など) の情報にアクセスできます。これはどこでも実行できます(必要に応じて、ビューまたはモデル内でも)。

例えば;

if (123 === AuthComponent::user('role_id')) {
    debug('hello admin user');
}

または、コントローラー内:

if (123 === $this->Auth->user('role_id')) {
    debug('hello admin user');
}

ログインユーザーへのアクセス

ただし、どこでも group-id を繰り返す必要がないようにするには、このためのメソッドを作成することをお勧めします (たとえば、AppController 内)。

/**
 * Checks if the currently logged in user is an admin
 *
 * @return bool  true if the current user is an admin
 */
protected function isAdmin()
{
    // probably best to make the id configurable (Configure::write())?
    return (123 === $this->Auth->user('role_id'));
}

アクセス制御

「単純な」承認を使用するisAuthorized()には、現在ログインしているユーザーのプロパティに基づいて、特定のアクションへのアクセスをブロックできるように、コントローラーで独自のアクションを作成できます。

ControllerAuthorize の使用

于 2013-03-27T19:45:02.417 に答える
0

アプリケーション全体の設定を含めることを目的としているため、ユーザー ロールを Configure 配列に配置する理由がわかりません。

個人的には、データベースにロールを含むテーブルがあります。いくつかのロールが追加される可能性がありますが、変更しないロールもあります (通常は管理者ロール)。これにより、その値をアプリケーション パラメーターとして Configure に保存し、後で確認することができます。

ブートストラップ.php

Configure :: write('administrator.role_id', 1);

テストコントローラー:

if($this->Auth->user('role_id') == Configure :: read('administrator.role_id'))
{
    //do things specific to admin role
}

つまり、ユーザー ロールが何らかの方法で Configure に動的に格納されている場合は、おそらく同様に機能する可能性がありますが、それはおそらくより洗練されたソリューションではありません。

于 2013-03-27T16:10:34.927 に答える