2016-09-22 17 views
3

ほとんどのロールに基づいてユーザを認証したいと思います。すべての訪問者は方法のショーに達することができるはずです。だから私はのAppControllerに書いた:CakePHP 3のロールに基づいてユーザを認証する

public function beforeFilter(Event $event) { 
    $this->Auth->allow(['show']); 
} 

それは動作します。 AppControllerの

のinitialize()メソッドで、私も持っている:

$this->loadComponent('Auth', [ 
    'authorize' => 'Controller' 
]); 

を私は、すべての「インデックス」に到達し、メソッドを「追加」する役割を持つログインしているユーザーは、「ユーザー」できるようにしたいと思います私はAppControllerで書いた:

public function isAuthorized($user) { 
if (isset($user['role']) && $user['role'] === 'admin') { 
return true; 
} 
if (isset($user['role']) && $user['role'] === 'user') { 
$this->Auth->allow(['index', 'logout', 'add']); 
} 

return false; 
} 

管理者はすべての方法に期待通りに到達することができます。ロール "user"で記録されたユーザーは、 "index"または "add"メソッドに到達できません。これをどうすれば解決できますか?

答えて

5

あなたのロジックを使用してAuthが許可するのではなく、ロジックを使用してアクションをチェックしてロジックが許可されているかどうかを確認し、trueを返してください。

public function isAuthorized($user) { 

    // Admin allowed anywhere 
    if (isset($user['role']) && $user['role'] === 'admin') { 
     return true; 
    } 

    // 'user' allowed in specific actions 
    if (isset($user['role']) && $user['role'] === 'user') { 

     $allowedActions = ['index', 'logout', 'add']; 
     if(in_array($this->request->action, $allowedActions)) { 
      return true; 
     } 

    } 
    return false; 
} 

(明らかにこのコードはお好みに合わせて短縮することができ、それは概念を示している)

+1

ねえ、私はまだ投票はできませんが、あなたの答えは私をたくさん助けました。ありがとうございました! – nexequ

関連する問題