2016-09-22 67 views
3

我想根據幾個角色授權用戶。所有參觀者應該能夠達到方法展示。所以我寫了AppController:根據CakePHP中的角色授權用戶3

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

它的工作原理。

在初始化()的AppController的方法,我有也:

$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; 
} 

管理員可以按預期方式訪問所有方法。以角色「用戶」登錄的用戶無法訪問「索引」或「添加」方法。我怎樣才能解決這個問題?

回答

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