-1

私はこれにかなりの量を掘り下げましたが、最良の方法が何であるかを理解することができませんでした.

ログインする全員が「従業員」、「スーパーバイザー」、または「マネージャー」のいずれかである従業員管理システムがあります。

現時点では、ランクに応じてさまざまなバージョンのページを問題なく表示しています。ただし、通常の「従業員」は、手動で URL を入力すると、アクセスできないページにアクセスできます。CakePHP のドキュメントによると、デフォルトではすべてのページが制限されており、各ページへのアクセスを許可する必要があります。しかし、私はアクセスを許可しておらず、すべてのページにアクセスできるようです。

ページにアクセスするための最良の方法は何ですか? ありがとう!

編集: AppController の構成は次のとおりです。

   public $components = array(
        'DebugKit.Toolbar',
        'Session',
        'Auth' => array(
            'authenticate' => array(
                'Form' => array(
                    'userModel' => 'Employee'
                )
            ),
            'loginAction' => array(
                'controller' => 'employees',
                'action' => 'login',
                //'plugin' => 'users'
            ),
            'loginRedirect' => array('controller' => 'employees', 'action' => 'dashboard'),
            'logoutRedirect' => array('controller' => 'employees', 'action' => 'login'),
            'authError' => 'You must be logged in to see that.'
        )
    );

そして、常に false を返すように設定されている isAuthorized() メソッドがあります。

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;
}
4

2 に答える 2

0

データベースに 2 つのテーブルを作成する

  1. resources (id, controller, action) (これにはコントローラー名とアクション名が含まれます。)
  2. 許可 (roll_id、resource_id)

isAuthorized()機能中

  1. ロールがadminの場合、true を返します。
  2. そうでない場合は、以下を確認してください。
  3. $this->request->controller現在のコントローラー名を取得します。
  4. $this->request->action現在のアクション名を取得します。
  5. 現在のコントローラーとアクションのテーブルresource_idから取得します。resources
  6. とのpermissionテーブルのレコードを確認してください。resource_idroll_id
  7. レコードが存在する場合は true を返します。
  8. それ以外の場合は、デフォルトで false を返します。
于 2013-04-03T05:11:18.507 に答える