使用者角色許可權控制包 Laravel-permission 使用筆記(Laravel5+)

jrue發表於2019-02-16

第一部分 安裝

該軟體包可用於Laravel 5.4 或更高版本。 如果您使用的是舊版本的 Laravel ,請檢視該軟體包的 v1 分支。

第一步: 通過 composer 安裝軟體包:
composer require spatie/laravel-permission

(可選項)在 Laravel 5.5 中,服務提供商將自動獲得註冊。 在舊版本的框架中,只需在 config/app.php 檔案中新增服務提供者即可:

<?php
`providers` => [
    // other code
    SpatiePermissionPermissionServiceProvider::class,
];

第二步: 釋出遷移
php artisan vendor:publish –provider=”SpatiePermissionPermissionServiceProvider” –tag=”migrations”
遷移釋出成功後,執行遷移來建立角色和許可權表:
php artisan migrate

第四步: 釋出配置檔案:
php artisan vendor:publish –provider=”SpatiePermissionPermissionServiceProvider” –tag=”config”
釋出時 config/permission.php 配置檔案 包含:

<?php
return [

    `models` => [

        /*
         * 當使用這個包中的 “HasRoles” 特性時,我們需要知道應該
         * 使用哪個 Eloquent 模型來獲取您的許可權。
         * 當然,它通常只是“許可權(Permission)”模型,你也可以使用任何你喜歡的模型。
         * 
         * 您使用的許可權模型必須實現
         *  `SpatiePermissionContractsPermission` 契約。
         */

        `permission` => SpatiePermissionModelsPermission::class,

        /*
         * 當使用這個包中的 “HasRoles” 特性時,
         * 我們需要知道應該使用哪個 Eloquent 模型來檢索你的角色。
         * 當然,它通常只是 “角色(Role)” 模型,你也可以使用任何你喜歡的模型。
         *
         * 您使用的許可權模型必須實現
         * `SpatiePermissionContractsRole` 契約。
         */

        `role` => SpatiePermissionModelsRole::class,

    ],

    `table_names` => [

        /*
         * 當使用這個包中的 “HasRoles” 特性時,
         * 我們需要知道哪個表應該用來檢索你的“角色”。 
         * 我們選擇了一個基本的預設值,但您可以輕鬆將其更改為您喜歡的。
         */

        `roles` => `roles`,

        /*
         * 當使用這個包中的 “HasRoles” 特性時,
         * 我們需要知道哪個表應該用來檢索你的許可權。 
         * 我們選擇了一個基本的預設值,但您可以輕鬆將其更改為您喜歡的任何表。
         */

        `permissions` => `permissions`,

        /*
         * 
         * 當使用這個包中的 “HasRoles” 特徵時,
         * 我們需要知道應該使用哪個表來檢索你的“模型許可權”。 
         * 我們選擇了一個基本的預設值,但您可以輕鬆將其更改為您喜歡的任何表。
         * 
         */

        `model_has_permissions` => `model_has_permissions`,

        /*
         * 當使用這個包中的 “HasRoles” 特性時,
         * 我們需要知道哪個表應該用來檢索你的“模型角色”。 
         * 我們選擇了一個基本的預設值,但您可以輕鬆將其更改為您喜歡的任何表。
         */

        `model_has_roles` => `model_has_roles`,

        /*
         * 當使用這個包中的 “HasRoles” 特性時,
         * 我們需要知道應該使用哪個表來檢索您的“角色許可權”。 
         * 我們選擇了一個基本的預設值,但您可以輕鬆將其更改為您喜歡的任何表。
         */

        `role_has_permissions` => `role_has_permissions`,
    ],

    /*
     * 預設情況下,所有許可權將被快取24小時,
     * 除非更新許可或者更新角色來立即重新整理快取。
     */

    `cache_expiration_time` => 60 * 24,

    /*
     * 設定為 true 時,所需的許可權/角色名稱( permission/role)將新增到異常訊息中。
     * 在某些情況下,這可能被認為是資訊洩漏,
     * 所以為了獲得最佳安全性,預設設定為 false。
     */

    `display_permission_in_exception` => false,
];

第二部分 開始使用

第五步. 將 SpatiePermissionTraitsHasRoles 特徵新增到您的 User 模型中:`

<?php
namespace App;

use IlluminateFoundationAuthUser as Authenticatable;
use SpatiePermissionTraitsHasRoles;

class User extends Authenticatable
{
    use Notifiable, HasRoles;
    // other code
}

第六步. 使用中介軟體,分配許可權和角色來保護使用者:`
此軟體包附帶 RoleMiddleware 和 PermissionMiddleware 中介軟體。 直接將它們新增到 app/Http/Kernel.php 檔案中。

<?php
protected $routeMiddleware = [
    // other code
    `role` => SpatiePermissionMiddlewaresRoleMiddleware::class,
    `permission` => SpatiePermissionMiddlewaresPermissionMiddleware::class,
];
  • 使用中介軟體規則保護你的路由:

    <?php
    Route::group([`middleware` => [`role:super-admin`]], function () {
        // route code
    });
    
    Route::group([`middleware` => [`permission:publish articles`]], function () {
        // route code 
    });
    
    Route::group([`middleware` => [`role:super-admin`,`permission:publish articles`]], function () {
        // route code
    });
  • 路由案例

    <?php
    Route::group([`middleware` => [`role:編輯`]], function ($route) {
        $route->get(`/api/user`, `UserController@show`);
    });

相關文章