簡體   English   中英

Laravel角色和權限

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

);

這是做什么的? 讓我們一步一步地完成它:

首先,這是指定應用程序初始化時應該發生的事情。 據推測,還有其他可能發生的事件,但我不確定為什么在初始化應用程序后你想要更改規則。 初始化應用程序時,將調用閉包。

關閉這樣做:

  1. 獲取當前用戶 - 以后的規則取決於誰登錄

  2. 設置了幾個別名 - '因為我們很懶,不想一個一個地指定createread等規則。 我們可以使用manage來代替。

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

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

Laravel中有很多包用於實現角色和權限,但我發現spatie/laravel-permission是最好的。

在Laravel中找到了User角色和權限的解決方案

所以看來權威機構l4只是一個Facade插件。 實際的包本身就在這里: https//github.com/machuga/authority

這里的文檔更全面。 這應該在l4包上指定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM