我在我的項目使用CakePHP和我正在尋找一種合適的方式來檢查我的意見高級用戶權限。CakePHP的:檢查授權的意見
我在其內容取決於你的權利多個頁面(您可以查看一些塊或沒有,編輯一些相關信息或沒有,等...)
我搜索,我發現的唯一辦法就是實施授權助手,但我認爲最好的辦法,以那就是實現我的「UserController的」方法(如canPerformAction($行動,$控制器=「default_controller」)),是我錯了嗎?如果我是對的,如何正確調用這些方法?
謝謝。
編輯:更多精度
比如我有一個動作「editEventProducts」,用戶只能執行,如果他活動的所有者,如果事件狀態是< = 2
我檢查在我的控制器中「isAuthorized」功能,就像一個魅力。
但我有一個網頁叫做「eventDetails」,形式可以perfom幾個動作,如這個,我想表明的編輯按鈕,只要你能做到這一點。
如果其實我需要的是,你可以調用每個動作的「isAuthorized」功能的輸出,但我可以正確地從一個視圖得到它?
解決方案
我實現了一個授權助手誰做一些檢查,如這一個,這是最後一個白名單檢查,根據我的事件的狀態,希望這將有助於,代碼:
App::uses('AppHelper', 'View/Helper');
class AuthHelper extends AppHelper {
var $helpers = array('Session');
private $_whitelist = array(
'controller1' => array(
'events' => array(
'action1' => array(1 => true, 2 => true),
'action2' => array(1 => true, 2 => true),
'action3' => array(3 => true),
'action4' => array(6 => true)
)
),
'user' => array(
'controller1' => array(
'action1' => array(1 => true, 2 => true),
'action2' => array(1 => true, 2 => true)
)
)
);
public function canPerformAction ($action, $event_infos, $controller = 'events') {
return isset($this->_whitelist[$this->Session->read('Auth.User.role')][$controller][$action][$event_infos['Event']['state_id']]);
}
}
如何當前存儲這些權利?這對於正確的答案至關重要。它是「user_rights」表嗎? – mark
目前它在canEditEvent,canAddProducts,isAdmin系列函數中完成,我在我的控制器中調用,然後發送到視圖。 但的確我在考慮一個Auth助手,它擁有一個表和一個函數,如果在表中找不到,則返回相應的true/false和false。但是我想知道在MVC的想法中,這是否是最好的方式。 – nicolecoco02