Bir kullanıcı oturum açtığında bazı sayfaları mevcut değil nasıl yapılır

3 Cevap php

CakePHP biz $this->Auth->allow('someMethod'); giriş kalmadan bir sayfa görüntülenebilir yapmak için kullanabilirsiniz. Nasıl bir kullanıcı oturum zaman bazı aynı sayfa görüntülenemiyor yapabilirim? Bunun bir örneği, bir kullanıcı oturum kez ... ama erişilebilir değil açmış kullanıcı olmadan erişilebilir olmasını istediğiniz bir kayıt sayfası olur

I $this->Auth->deny('someMethod') isAuthorized() koymak ancak yöntem izin listesinde ise biz o sayfayı çalıştırmayı denediğinizde sonra isAuthorized denir değil gibi geliyor bana.

Herhangi bir giriş? Teşekkür ederim

3 Cevap

Kek Auth yerleşik böyle karmaşık bir kurallar vardır. Bunu manuel gibi koşulları için kontrol etmek gerekir. Ama çok basit:

// Controller
function register() {
    if ($this->Auth->user()) {
        $this->redirect(/* somewhere else */);
    }
}

Mlevits cevap aksine, Oturum şey saklamak gerekmez, bilgi AuthComponent kendisinden kolayca kullanılabilir. http://book.cakephp.org/view/387/user

There's also an example how to do it by dynamically using deny(), but that's not as clear in a simple case like this IMHO. http://book.cakephp.org/view/383/deny
Also, deny() produces an error message ("You're not authorized to access this location"), which is probably not what you want for the user experience in this case.

EDIT:

CakePHP farklı bir sözdizimi kullanılır farkında değildi.

Daha sonra Session değişkeni ayarlamak için aşağıdakileri kullanabilirsiniz:

$this->Session->write('user_id', '<some_user_name>');

Onlar oturum eğer kullanıcıyı yönlendirmek için kullanabilirsiniz:

if ($this->Session->check('user_id'))
{
    $this->redirect('http://google.com');
}

Ve sonra bir Session kullanımını yok etmek için:

$this->Session->destroy()

More information about CakePHP Sessions

Teşekkürler

Sen Aplikasyon çapında kontrol izin AppController içinde yöntem beforeFilter bunu kontrol edebilirsiniz. Örneğin:

<?php
class AppContoller extends Controller {
    var $components = array('Session', 'Auth');

    function beforeFilter(){
        $this->Auth->allow('register', 'home');
        // Check if current action allowed to access without authorization and User has login
        if(array_key_exists($this->params['action'], $this->Auth->allowedActions) && $this->Auth->user()){
            $this->redirect(/* somewhere else */);
        }
    }
}
?>

Tabii ki de yerine AppController bazı denetleyicisi bunu uygular edebilirsiniz.