2012-05-30 12 views
5

मेरे पास एक सारणी है जो उपयोगकर्ता उपयोगकर्ताओं (user_level_id) से जुड़े मेरे उपयोगकर्ताओं (user_levels) को विभाजित करती है। स्तर 5 प्रशासक है।केकेपीएचपी अधिकृत नहीं है

मैं कुछ कार्यों को देखने से समझना चाहता हूं और समझ सकता हूं कि मैं इसे अधिकृत कर सकता हूं। मैं पुस्तक के अनुसार गया और मुझे पूरा यकीन है कि मेरे पास यह सही है, लेकिन यह काम नहीं कर रहा है। यह किसी भी लॉग इन उपयोगकर्ताओं को अभी भी किसी भी क्रिया का उपयोग करने की अनुमति देता है हालांकि मैं इसे अधिकृत करता हूं।

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

आप किस पुस्तक का अनुसरण कर रहे हैं? – Bahdeng

उत्तर

6

ऐसा लगता है कि तुम सिर्फ विन्यास सिर्फ AuthComponent बताने के लिए isAuthorized() उपयोग करने के लिए छूट रहे हैं:

यहाँ मेरी कोड है।

'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

हे जेरेमी, आपके उत्तर के लिए धन्यवाद, केवल 1 प्रश्न, मैं अभी भी समझ में नहीं आता कि मैं विशिष्ट कार्यों से मानक उपयोगकर्ताओं को कैसे कहता हूं। उदाहरण के तौर पर, मेरे उपयोगकर्ताओं के नियंत्रक के पास कई क्रियाएं होती हैं, और मानक उपयोगकर्ता उदाहरण प्रोफाइल और पंजीकरण का उदाहरण दे सकते हैं, लेकिन जोड़ने, संपादित करने और हटाने जैसी कार्रवाइयां मैं अवरुद्ध करना चाहूंगा। मैं इसे अधिकृत() के भीतर कैसे कर सकता हूं? मुझे पता है कि मैं अनुमति का उपयोग नहीं कर सकता और इनकार कर सकता हूं क्योंकि यह केवल उपयोगकर्ताओं में गैर-लॉग इन पर लागू होता है। – mauzilla

+0

आम तौर पर आप ऐसा कुछ करने के लिए एसीएल का उपयोग करेंगे। हालांकि, आप अभी भी प्रत्येक नियंत्रक में एक कस्टम 'is Authorized()' के साथ ऐसा कर सकते हैं और प्रति उपयोगकर्ता समूह की अनुमति की एक सरणी संग्रहीत कर सकते हैं, फिर उसके खिलाफ जांच करें। किसी भी तरह से, यह एक नई चर्चा के लिए एक विषय पर्याप्त है। – jeremyharris

+0

@ जेरेमीहरिस एक विषय-वस्तु प्रश्न; क्यों "रीडायरेक्ट" और "loginRedirect" विकल्प मौजूद हैं और एक ही यूआरएल को इंगित करते हैं? – ozanmuyes

संबंधित मुद्दे