2014-07-23 126 views
1

從我的研究中,我發現Authority包(https://github.com/machuga/authority-l4)最適合實現基於角色/權限的用戶認證系統,同時保持靈活性。我無法準確理解如何使用此軟件包。文檔涵蓋了它的功能和配置,但沒有解釋一些事情。希望有人能指引我朝正確的方向發展。Laravel具有權限的角色和權限

配置文件的用途是什麼?指定權限?這些沒有存儲在數據庫中?

我看到你可以使用別名將權限組合在一起。如果我不想使用別名,該怎麼辦?有沒有辦法單獨創建一個權限?

我看到你可以爲資源創建規則,例如只允許用戶編輯他們分配的職位。文檔似乎沒有關於此的很多信息。

任何幫助將不勝感激。搜索了互聯網,但沒有找到多少這個包。

回答

2

我還沒有使用權威,雖然我正在尋找一個項目。根據我對文檔的閱讀,以下是它的工作方式:

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'); 
     } 
    } 

); 

這是什麼做的?讓我們一步一步地看看它:

首先,這是指定應用程序初始化時應該發生的事情。據推測,還有其他可能發生的事件,但我不確定爲什麼你想在應用初始化後改變規則。當應用程序初始化時,關閉被調用。

封閉做到這一點:

  1. 獲取當前用戶 - 後面的規則取決於誰是登錄

  2. 設立了幾個別名 - 「因爲我們是懶惰和Don」不想一一指定createread等的規則。我們可以用manage代替。

  3. 接下來檢查當前用戶。如果他們是管理員,則他們會獲得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)。如果用戶試圖編輯除自己以外的人,則檢查失敗。

這是一個非常基本的概述 - 希望它有幫助。

+0

感謝您的詳細解釋解決方案。絕對有幫助。在我的應用程序中,會有很多規則,將它們放在配置文件中感覺很奇怪。這將是很長的...... – Chris

1

有這麼多的包建在Laravel執行角色和權限,但我發現spatie/laravel-permission是最好的。

我發現從User role and permission in Laravel

+0

實際上這是最新的軟件包。 –