2

CakeDC Users プラグインをインストールしましたが、デフォルトでは機能しないことがわかりましroleis_adminrole通常のユーザー名=registeredおよびis_admin=でログインすると0、引き続き にアクセスでき/admin/users/add/ます。roleとの 2 種類のチェックがあるのはis_adminなぜroleですか。administratoris_admin0

管理セクションを保護し、さまざまなページでユーザーの役割を利用できるように、この問題に対する推奨される解決策を探しています。それでも、なぜis_admin存在するのか理解できません.なぜrole=administratorがそれをすべて処理できるのですか.

4

2 に答える 2

4

メソッド「beforeFilter()」の「app/Controller/AppController.php」に次のコードを追加して、まったく同じ問題を解決しました。

    if (isset($this->params['prefix']) && $this->params['prefix'] == 'admin') {
        if ($this->Session->check('Auth.User.role') and 'admin' !== $this->Session->read('Auth.User.role')) {
            $this->Auth->deny('*');
            return $this->flash('Non admin access unauthorized', '/');
        }
    } 

このソリューションが最適ではないことは認めますが、確かにうまくいきます!

于 2013-05-26T18:43:31.860 に答える
3

これはプラグインの問題ではありません。認証アプリケーション全体を独自に実装する必要があります。プラグインは基本を提供するだけで、クライアントの要件に基づいてアプリをカスタマイズする仕事はしません. この章を読むことをお勧めしますhttp://book.cakephp.org/2.0/en/core-libraries/components/authentication.html

is_admin チェックと役割フィールドが存在する理由は複数あります。ユーザーは任意の役割を持つことができますが、たとえば is_admin がチェックされている場合にのみ、管理領域にアクセスできます。is_admin だけでは、ロールを持つことはできません。両方のフィールドは、さまざまなシナリオをカバーするために存在します。繰り返しますが、このプラグインは、ビルドできるキック スタートおよびベースであると考えられています。カスタマイズしたい場合は、これを行う必要があります。

必要なものは何でも使用する方法を示す例があります。

http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#using-controllerauthorize

class AppController extends Controller {
public $components = array(
    'Auth' => array('authorize' => 'Controller'),
);
public function isAuthorized($user = null) {
    // Any registered user can access public functions
    if (empty($this->request->params['admin'])) {
        return true;
    }

    // Only admins can access admin functions
    if (isset($this->request->params['admin'])) {
        return (bool)($user['role'] === 'admin');
    }

    // Default deny
    return false;
}

}

于 2013-05-26T19:28:01.550 に答える