CakePHP'de IsAuthorized () denir değil

3 Cevap php

Ben bir yönetici bayrağı için bir kontrol yapmak için IsAuthorized () yöntemini kullanmaya çalışıyorum, ama işlevi çağrılacak görünüyor asla. Ben her zaman return false fonksiyonu ayarlamak bile, herhangi bir kullanıcı sağlar. Bu sadece denir değil gibi görünüyor.

Ben $ this-> Auth-> = 'controller' yetki ayarı daha fazla bir şey yapmak gerekiyor mu?

/ app / app_controller.php gelen

class AppController extends Controller
{

var $components = array('Auth');

function beforeFilter()
{
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
    $this->Auth->loginRedirect = array('controller' => 'pages', 'display' => 'home');
    $this->Auth->logoutRedirect = '/';
    $this->Auth->authorize = 'controller';
    $this->Auth->userScope = array('User.active' => 1);
}

function isAuthorized()
{
    if (strpos($this->action, "admin_") != false)
    {
    	if ($this->Auth->user('isAdmin') == '0')
    	{
    		return false;
    	}
    }
    return true;
}
}

3 Cevap

Eğer diğer Controller'daki Doğrulama ayarlarını geçersiz kılma konum olmadığını kontrol etmelisiniz.

Birincisi, bunun basit bir debug($this); die; koyarak deneyin, isAuthorized() çağrıldığını doğrulamak için.

Ölüyor değilse, muhtemelen (eğer parent::isAuthorized() çağrıyı kaçırıyorsun) diğer bazı denetleyicisi geçersiz kılma ediyoruz.

O değilse, o zaman muhtemelen beforeFilter() ile aynı şeyi yapıyoruz.

Dr Hannibal Lecter Yanıt Ek, (ben yaptım gibi ...) Eğer bu sorunla karşılaşırsanız, başka olası nedeni vardır:

(- 2.x işaretli değil, en azından CakePHP'de 1.3.10 içinde) kontrolörü adlandırılır ise tests_controller, Auth-Component başlangıç ​​yöntemiyle kimlik doğrulaması başlatmadan iptal eder. Yani emin olun ki size never name a Controller tests_controller ...

Kek \ libs \ controller \ bileşenlerinden alıntı \ auth.php

function startup(&$controller) {
    $isErrorOrTests = (
        strtolower($controller->name) == 'cakeerror' ||
        (strtolower($controller->name) == 'tests' && Configure::read() > 0)
    );
    if ($isErrorOrTests) {
        return true;
    }
...

Eğer 'Auth' o denetleyicisi için bileşenler dizide olduğundan emin olmanız gerekir:

$this->components[] = 'Auth';

yapıcısı o bırakın ve (tabii, öyle değil, sürece) çalışması gerekir. İyi şanslar!