[英]Laravel Roles & Permissions with Authority
根據我的研究,我發現Authority包( https://github.com/machuga/authority-l4 )最適合實現基於角色/權限的用戶身份驗證系統,同時保持靈活性。 我無法准確理解如何使用此包。 文檔涵蓋了它的功能和配置,但沒有解釋一些事情。 希望有人能指出我正確的方向。
配置文件的目的是什么? 要指定權限? 這些是不是存儲在數據庫中?
我看到你可以使用別名將權限組合在一起。 如果我不想使用別名怎么辦? 有沒有辦法單獨創建一個權限?
我看到你可以為資源創建規則,例如只允許用戶編輯分配給他們的帖子。 該文檔似乎沒有太多關於此的信息。
任何幫助將不勝感激。 搜索了互聯網,但沒有找到這個包。
我沒有使用過Authority,雖然我正在為一個項目看它。 基於我對文檔的閱讀,以下是它的工作方式:
config
文件用於指定包的配置。 角色和權限可以存儲在數據庫中(盡管它們不必存在)。
配置文件用於告訴包如何工作。 因此,例如,配置文件允許您為一個或多個權限設置別名 - 如果您使用別名,則需要預先完成,以便程序包以您期望的方式工作。 作為另一個例子,規則(更晚些時候)可以(並且應該 )在配置中設置。
請考慮以下配置(來自Authority文檔):
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');
}
}
);
這是做什么的? 讓我們一步一步地完成它:
首先,這是指定應用程序初始化時應該發生的事情。 據推測,還有其他可能發生的事件,但我不確定為什么在初始化應用程序后你想要更改規則。 初始化應用程序時,將調用閉包。
關閉這樣做:
獲取當前用戶 - 以后的規則取決於誰登錄
設置了幾個別名 - '因為我們很懶,不想一個一個地指定create
, read
等規則。 我們可以使用manage
來代替。
接下來它檢查當前用戶。 如果他們是管理員,他們將獲得all
資源的manage
權限。
如果您的訪問控制信息存儲在數據庫中,您可以在此處加載它並使用該數據來設置規則。
現在,稍后在執行您的應用程序時,您需要檢查並查看用戶是否可以創建用戶記錄。 在控制器中執行此操作:
if( Authority::can('create', 'User') ) {
User::create(array(
'username' => 'someuser@test.com'
));
} 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 = 'someuser@test.com';
$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?!");
}
在這種情況下,Authority實例作為$self
傳遞到閉包中,然后檢索當前用戶ID並針對正在編輯的用戶( $user
)進行檢查。 如果用戶嘗試編輯自己以外的其他人,則檢查失敗。
這是一個非常基本的概述 - 希望它有所幫助。
所以看來權威機構l4只是一個Facade插件。 實際的包本身就在這里: https : //github.com/machuga/authority
這里的文檔更全面。 這應該在l4包上指定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.