2012-05-30 14 views
5

Kullanıcılarım (user_levels) kullanıcı masasına (user_level_id) bağlı bir tablo var. Seviye 5 yönetici.cakePHP isAuthorized not

Bazı eylemlerin izlenmesini ve anlaşılmasını sınırlamak istiyorum. Bunu, Yetkilendirilmiş ile yapabilirim. Kitaba göre gittim ve doğru yaptığımdan eminim, ama işe yaramıyor. Oturum açmış olan herhangi bir kullanıcının, yetkisiz olduğu halde inkar etmeme rağmen herhangi bir eyleme erişmesine izin verir. Sadece isAuthorized() kullanmak sadece AuthComponent anlatmak için yapılandırma eksik olduğunu

App Controller:public $components = array(
    'Session', 

    'Auth' => array(
     'loginAction' => array(
      'controller' => 'users', 
      'action' => 'login', 
     ), 
     'authError' => "Your username and password is incorrect, please try again.", 
     'authenticate' => array(
      'Form' => array(
       'scope' => array('User.user_status_id' => 1) 
      ) 
     ), 
     'redirect' => array("controller" => "users", "action" => "profile"), 
     'loginRedirect' => array("controller" => "users", "action" => "profile") 
    ) 
); 

public function isAuthorized($user = null) { 
    if($this->Auth->user("user_level_id") == 5) { 
     return true; 
    } 
    // Default deny 
    return false; 
} 

public function beforeFilter() { 
    $this->Auth->allow("display"); 
    if($this->Auth->loggedIn() == true) { 
     $this->set("user_name",$this->Auth->user("first_name")." ".$this->Auth->user("last_name")); 
     $this->set("loggedIn",true); 
     if($this->Auth->user("user_type_id") == 5) { 
      $this->set("navigation","navigation_admin"); 
     } else { 
      $this->set("navigation","navigation_loggedin"); 
     } 
    } else { 
     $this->set("loggedIn",false); 
     $this->set("navigation","navigation_notloggedin"); 
    } 

} 

} 

// Users Controller: 

public function beforeFilter() { 
    $this->Auth->allow("login"); 
    parent::beforeFilter(); 
} 

public function isAuthorized($user = null) { 
    if($this->Auth->user("user_level_id") == 5) { 

     return true; 
    } 
    // Default deny 
    return parent::isAuthorized($user); 
} 
+0

Hangi kitabı takip ediyorsunuz? – Bahdeng

cevap

6

görünüyor:

İşte benim kodudur.

'Auth' => array(
     'loginAction' => array(
      'controller' => 'users', 
      'action' => 'login', 
     ), 
     'authError' => "Your username and password is incorrect, please try again.", 
     'authenticate' => array(
      'Form' => array(
       'scope' => array('User.user_status_id' => 1) 
      ) 
     ), 
     'authorize' => array('Controller'), // <- here 
     'redirect' => array("controller" => "users", "action" => "profile"), 
     'loginRedirect' => array("controller" => "users", "action" => "profile") 
    ) 
+0

hey jeremy, cevabınız için teşekkür ederim, sadece 1 soru, hala belirli eylemleri standart kullanıcılar söylemeyi engellemeyi anlamıyorum. Örnek olarak, kullanıcı denetleyicimin bir dizi eylemi vardır ve standart kullanıcılar örnek olarak profile erişebilir ve kayıt yapabilir, ancak ekleme, düzenleme ve silme gibi eylemleri engellemek isterdim. Bunu isAuthorized() içinde nasıl yaparım? İzin veremediğimi ve inkar edemediğimi biliyorum, çünkü bu sadece giriş yapmayan kullanıcılar için geçerlidir. – mauzilla

+0

Genel olarak, böyle bir şey yapmak için ACL'yi kullanırsınız. Bununla birlikte, bunu her denetleyicide özel bir 'isAuthorized()' ile yapabilir ve kullanıcı grubu başına bir dizi izin verilen eylemi saklayabilir, ardından buna karşı kontrol edebilirsiniz. Her iki durumda da, bu yeni bir tartışma için yeterli bir konu. – jeremyharris

+0

@jeremyharris Bir konu dışı soru; neden aynı URL’yi işaretleyip "yönlendirmek" ve "loginRedirect" seçenekleri var? – ozanmuyes