2012-05-30 11 views
5

ユーザテーブル(user_level_id)にリンクしているユーザ(user_levels)を分割するテーブルがあります。レベル5は管理者です。cakePHP isAuthorized not working

特定のアクションを表示しないように制限したいと思います。isAuthorizedでこれを行うことができます。私は本に沿って行って、私はそれが正しいと確信していますが、それは動作していません。私はisAuthorizedで拒否していますが、ログインしているすべてのユーザーはまだそのアクションにアクセスできます。あなただけisAuthorized()を使用するだけでAuthコンポーネントを伝えるための構成が欠落しているよう

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

が見える:

は、ここに私のコードです。

'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つの質問、私はまだ私がどのようにブロックする特定の行動から標準ユーザーを言うのか分かりません。例えば、私のユーザーのコントローラには多数のアクションがあり、標準ユーザーはプロファイルにアクセスして登録することができますが、追加、編集、削除などの操作はブロックしたいと考えています。 isAuthorized()内でこれを行うにはどうすればよいですか?私は使用許可と拒否を使用することができないことを知っているのは、ログインしていないユーザーのみに適用できるからです。 – mauzilla

+0

一般に、ACLを使ってそのようなことを行います。しかし、各コントローラでカスタムの 'isAuthorized()'を使ってこれを行い、ユーザグループごとに許可されたアクションの配列を格納し、それに対してチェックすることができます。いずれにしても、それは新しいディスカッションの話題で十分です。 – jeremyharris

+0

@jeremyharrisトピック外の質問です。なぜ "redirect"と "loginRedirect"オプションが存在し、同じURLを指しているのでしょうか? – ozanmuyes