2

第一部分 安装

该软件包可用于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');
    });

前端小菜
266 声望8 粉丝

努力可以改变能力