1

CakePHP の任意のページへのアクセスをブロックするにはどうすればよいですか? ページとは、ページ フォルダーにある実際のビューを指しています。

この行を削除すると機能しますが、ユーザーがログインできなくなります。直接ループが作成されます。

$this->Auth->allow('display');

基本的に、ユーザーが任意のページを表示したい場合、ログインしていない場合、ログイン ( app/users/login) ページにリダイレクトされます。ログインすると、最後にアクセスしようとしたページに移動します。

これについてどうすればいいですか?

4

2 に答える 2

2

あなたの状況の問題は、pagesController によって表示されるすべてのページが同じアクション ( display()) であり、異なるパラメーター (表示するページ) のみを使用することです。したがって、すべてのページへのアクセスがブロックされるため、display アクションへのアクセスをブロックすることはできません。

ページ数が限られている場合、これを実装する最も簡単な方法はControllerAuthorize. こちらのドキュメントをお読みください。ControllerAuthorize の使用

class AppController extends Controller {
    public $components = array(
        'Auth' => array('authorize' => 'Controller'),
    );
    public function isAuthorized($user = null) {
        // Make all actions public 
        return true;
    }
}

次に、ページコントローラー内で;

class PagesController extends AppController {

    public function isAuthorized($user = null) {
        if ('display' !== $this->request->action) {
            // other actions; let he AppController handle access
            return parent::isAuthorized($user);
        }

        if (!empty($user)) {
            // Logged-in users have access to any page
            return true;
        }

        $page = empty($this->request->params['pass'][0]) ? null : $this->request->params['pass'][0];

        switch($page) {
            case 'home':
            case 'about':
            // etc
               return true;
        }

        // all other pages are 'private'
        return false;
    }
}

もちろん、ニーズに合わせて変更してください

于 2013-04-02T20:57:40.347 に答える
0

$this->Auth->allow('\','display'); を使用します。「\」ページの後のすべてを許可します..または、表示ページ以外を許可しない場合は何もしません。

于 2013-03-27T06:13:09.967 に答える