0

私が書いている CakePHP アプリケーションで、管理者と通常のユーザーを区別するための簡単な機能を書き込もうとしています。またはという名前のフィールドを持つようにusersテーブルを変更しました。admin01

では、次のようAppController.php$components配列を設定しました。

public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Blowfish' => array(
                'fields' => array('username' => 'email')
            )
        ),
        'loginRedirect' => array('controller' => 'pages', 'action' => 'home'),
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'),
        'authorize' => array('Controller')
    )
);

また、この方法:

public function isAuthorized($user) {
    // Check if admin
    if(isset($this->params['admin']) && $this->Auth->user('admin') == 1) {
        echo "admin";
        return true;
    }

    // Default deny
    return false;
}

ページをロードすると、次のエラーが表示されます: (net::ERR_TOO_MANY_REDIRECTS): There were too many redirects.. 何らかの理由で、上記のコードが無限のリダイレクトを引き起こしていますが、その理由はわかりません。

adminまた、管理者が のような URL にアクセスできるように、ルーティング プレフィックスを設定しました/admin/users/editadminそのページに移動すると、無限のリダイレクトが得られず、本来echoあるべきように表示されます。

オンラインのチュートリアルを読み、Cake のドキュメントを読みましたが、それらはすべて無限リダイレクトで終わっているようです。管理者と通常のユーザーを区別し、それぞれの特定のアクションへのアクセスを拒否/許可できるように設定するにはどうすればよいですか?役割?

4

1 に答える 1

0

Sixthpoint はすでにこれを指摘しています。

Auth オブジェクトがない場合、Auth コンポーネントは Pages Controller にリダイレクトしています。

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow("*"); // * or array("actions", "that", "are", "allowed")
}

したがって、これは本質的に無限ループを作成しています。最初の Auth オブジェクトが欠落しており、PagesController に送信されます。Auth コンポーネントは、PagesController を含むすべてのコントローラーを承認するように構成されています。そして、ループは PagesController へのリダイレクトを繰り返します。

ACLを調べてみましたか? 役割を ACL と組み合わせて使用​​することで、同じことを実現できます。

于 2013-03-09T04:04:56.077 に答える