我還沒有使用權威,雖然我正在尋找一個項目。根據我對文檔的閱讀,以下是它的工作方式:
config
文件用於指定軟件包的配置。角色&權限可以將存儲在數據庫中(儘管它們不一定是)。
配置文件在那裏告訴軟件包如何工作。因此,例如,配置文件允許您爲一個或多個權限設置別名 - 如果使用別名,則需要事先完成,以便軟件包以您期望的方式工作。作爲另一個例子,規則(更晚的)可以(並且應該)在配置中設置。
考慮下面的配置(從權威文檔):
return array(
'initialize' => function($authority) {
$user = $authority->getCurrentUser();
//action aliases
$authority->addAlias('manage', array('create', 'read', 'update', 'delete'));
$authority->addAlias('moderate', array('read', 'update', 'delete'));
//an example using the `hasRole` function, see below examples for more details
if($user->hasRole('admin')){
$authority->allow('manage', 'all');
}
}
);
這是什麼做的?讓我們一步一步地看看它:
首先,這是指定應用程序初始化時應該發生的事情。據推測,還有其他可能發生的事件,但我不確定爲什麼你想在應用初始化後改變規則。當應用程序初始化時,關閉被調用。
封閉做到這一點:
獲取當前用戶 - 後面的規則取決於誰是登錄
設立了幾個別名 - 「因爲我們是懶惰和Don」不想一一指定create
,read
等的規則。我們可以用manage
代替。
接下來檢查當前用戶。如果他們是管理員,則他們會獲得manage
資源的all
資源權限。
如果您的訪問控制信息存儲在數據庫中,則可以在此處加載它並使用該數據設置規則。
現在,稍後在執行您的應用程序時,您需要檢查並查看用戶是否可以創建用戶記錄。在您的控制器中執行此操作:
if(Authority::can('create', 'User')) {
User::create(array(
'username' => '[email protected]'
));
} else {
// what happens if the user's trying to do something they're not
// allowed to do?
throw new Exception("No way man!");
}
這會檢查您在配置中設置的規則,並確定是否允許用戶執行此操作。如果他們不是,那麼(在我的例子中)拋出異常。你可能想要更優雅地處理它。
權限可以讓您更靈活地定義您的權限。例如,
Authority::allow('manage', 'User', function($self, $user){
return $self->getCurrentUser()->id === $user->id;
});
此規則包括一個檢查,允許用戶管理自己的用戶記錄,但沒有其他人。要做到這一點,你需要調整上面的例子。
if(Authority::can('update', 'User', $user)) {
$user->username = '[email protected]';
$user->save();
} else {
// what happens if the user's trying to do something they're not
// allowed to do?
throw new Exception("What do you think you're doing?!");
}
在這種情況下,管理局實例被傳遞到閉合作爲$self
然後當前用戶ID被檢索並供用戶檢查被編輯($user
)。如果用戶試圖編輯除自己以外的人,則檢查失敗。
這是一個非常基本的概述 - 希望它有幫助。
感謝您的詳細解釋解決方案。絕對有幫助。在我的應用程序中,會有很多規則,將它們放在配置文件中感覺很奇怪。這將是很長的...... – Chris