2017-06-13 5 views
0

私の管理ハブページは現在、PagesController(admin)にあります。ただし、ログインしていないユーザーと非管理ユーザーの両方が、そのハブからのすべてのリンクにアクセスできない場合でも、このハブページにアクセスできます。CakePHP 3 - PagesControllerのページに対する承認

編集:「管理者」はPagesControllerの機能ではなく「表示」に該当するため、おそらく機能していないことに気付きました。

次のように私のAppControllerは次のように

public function initialize() 
{ 
    parent::initialize(); 

    $this->loadComponent('RequestHandler'); 
    $this->loadComponent('Flash'); 
    $this->loadComponent('Auth',[ 
     'authorize' => 'Controller', 
    ]); 

    $this->Auth->allow(['display']); 
} 

public function beforeFilter(Event $event) 
{ 
    $this->Auth->deny(['admin']); 

} 

私をPagesControllerは次のとおりです。

public function initialize() 
{ 
    parent::initialize(); 
    $this->Auth->deny(['admin']); 
} 

public function isAuthorized($user) 
{ 
    if (in_array($this->request->action,['admin'])) { 
     return (bool)($user['role_id'] === 1); //where role_id = 1 refers to an admin 
    } 
    return parent::isAuthorized($user); 
} 

答えて

0

あなたは行動ではなく、接頭語に対してチェックしています。 Documentation何をしたいことは

if ($this->request->getParam('prefix') === 'admin') 
+0

注意をテストされていないことに注意してください/3.0/en/controllers/components/security.html#usage)は 'if($ this-> request-> getParam( 'admin'))'が行く方法であることを示します。私は管理用ルーティングを使用していないので、どちらが正しいか、どちらが受け入れられるのかを簡単に確認することはできません。 –

1

Auth->拒否()関数であることを示唆していることはアクションにアクセスunauthoriedユーザーを防ぐためです。一方、Auth-> allow()関数は、特定の(またはすべての)アクションにパブリックアクセスを与えることです。

ここにドキュメントを読んでください:あなたは、それは次のように読んで必要として動作するAuthコンポーネントの場合https://book.cakephp.org/3.0/en/controllers/components/authentication.html#making-actions-require-authorization

を:あなたは別の管理ユーザーのデータベーステーブルを持っていて、アクセスするための資格情報の訪問者をお願いしたいと仮定するとユーザーが制限付きページにアクセスしたとき、またはユーザーがPagesControllerにアクセスしたときにAuthコンポーネントを読み込んで、管理者ユーザーテーブルがAuthで定義されていることを確認することができます。テーブルの名前をつけたときに、コンポーネントやCakephpの規則に従っていました。 PagesControllerで

のAppController

public function initialize() 
{ 
    parent::initialize(); 
    if ($this->request->params["controller"] == 'Pages') { 
     $this->loadComponent('Auth', [ 
       'loginAction' => [ 
        'controller' => 'Access', 
        'action' => 'admin_login', 
        'plugin' => 'Access' 
       ], 
       'loginRedirect' => [ 
        'controller' => 'Access', 
        'action' => 'admin_index', 
        'plugin' => 'Access' 
       ], 
       'authenticate' => [ 
        'Form' => [ 
        'userModel' => 'your-admin-database-table' 
       ] 
      ] 
      ]); 
    } 
} 

そして、以下が必要です。

public function initialize() 
{ 
    parent::initialize(); 
} 

LoginActionの - 管理者のログインに使用されます。 loginRedirect - ログイン後に管理者ユーザーを迎える場所です。 authenticate - データベース名やフィールドなどのフォームの詳細を定義するために使用されます。

非常に詳細なドキュメントは、ここで見つけることができます:https://book.cakephp.org/3.0/en/controllers/components/authentication.html

編集]を[ドキュメントの別のビット](https://book.cakephp.orgというコードが

関連する問題