0

私は、システムにログインできる管理者とエージェントを持つ Cakephp を使用してアプリケーションを作成しています。管理者は、エージェントとは異なるレイアウトになります。ロール フィールド (admin、agent) を追加したユーザー テーブルを既に作成しています。core.php にプレフィックスを追加しました。

Configure::write('Routing.prefixes', array('admin','agent'));

管理者のログインとログアウトを作成できましたが、残りの作業をどのように進めるべきかまだ混乱しています。たとえば、 beforeFilter() および isAuthorized() 関数がどのように機能するかわかりません。ユーザーがその機能にアクセスできるかどうかを確認する方法。また、誰かがこのページ domain.com/admin にアクセスしようとした場合のリダイレクトは、 admin/login page にリダイレクトされます。

ありがとう。

4

3 に答える 3

0

beforeFilter() を使用して各アクションへのアクセスを制御します。以下の例では、ビューおよびインデックス アクションへのアクセスのみを許可し、その他のアクションはすべてブロックされます。

$this->Auth->allow('view', 'index');

controller のすべてのアクションへのアクセスを許可したい場合は、before フィルターでこれを試してください。

$this->Auth->allow();

誰が何にアクセスできるかを制御するには、次のようにアプリ コントローラーで簡単な関数を使用できます。

protected function _isAuthorized($role_required) {
          if ($this->Auth->user('role') != $role_required) {
                 $this->Session->setFlash("your message here...");
                 $this->redirect("wherever you want the user to go to...");
            }
   }

あなたのコントローラーアクションで、例えば。最初の行でadmin_deleteを実行すると、次のようになります。

$this->_isAuthorized('admin');

最後に、リダイレクトは次のように機能します。

$this->redirect(array('controller' => 'home', 'action' => 'dashboard'));

同じコントローラー内でリダイレクトする場合は、次のようにします。

$this->redirect('dashboard');

お役に立てれば。

于 2013-08-21T12:58:12.857 に答える
0

ロールごとの許可を確認するには、コントローラーごとに Auth->allow([...]) を使用するのが最善だと思います。

Controller::beforeFilter() を次のようにチェックインするのが最善だと思います。

switch ($role) {
  case 'admin': 
    $this->Auth->allow(...); //Allow delete
    //notice no break; statement, so next case will execute too if admin
  case 'manager':
    $this->Auth->allow(...); //Allow edit
  case default: 
    $this->Auth->allow(...); //Allow index
}

AppController をチェックインすることはできますが、1 つのファイルだけを編集するときに 2 つのファイルを変更することを忘れないようにしたいと思います。

于 2013-08-21T20:18:12.480 に答える