用戶角色權限控制包 Laravel-permission 使用筆記(Laravel5+)

第一部分 安裝

該軟件包可用於Laravel 5.4 或更高版本。 若是您使用的是舊版本的 Laravel ,請查看該軟件包的 v1 分支。
第一步: 經過 composer 安裝軟件包:
composer require spatie/laravel-permission
(可選項)在 Laravel 5.5 中,服務提供商將自動得到註冊。 在舊版本的框架中,只需在 config/app.php 文件中添加服務提供者便可:
<?php
'providers' => [
    // other code
    Spatie\Permission\PermissionServiceProvider::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)」模型,你也可使用任何你喜歡的模型。
         * 
         * 您使用的權限模型必須實現
         *  `Spatie\Permission\Contracts\Permission` 契約。
         */

        'permission' => Spatie\Permission\Models\Permission::class,

        /*
         * 當使用這個包中的 「HasRoles」 特性時,
         * 咱們須要知道應該使用哪一個 Eloquent 模型來檢索你的角色。
         * 固然,它一般只是 「角色(Role)」 模型,你也可使用任何你喜歡的模型。
         *
         * 您使用的權限模型必須實現
         * `Spatie\Permission\Contracts\Role` 契約。
         */

        'role' => Spatie\Permission\Models\Role::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 Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use Notifiable, HasRoles;
    // other code
}
第六步. 使用中間件,分配權限和角色來保護用戶:`
此軟件包附帶 RoleMiddleware 和 PermissionMiddleware 中間件。 直接將它們添加到 app/Http/Kernel.php 文件中。
<?php
protected $routeMiddleware = [
    // other code
    'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
    'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::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');
    });
相關文章
相關標籤/搜索