Laravel5.5 使用 spatie/Laravel-permission 实现权限分配

心有猛虎 细嗅蔷薇

最近想用Laravel做一个权限管理 但是不知道该如何下手 就查了一些资料 发现了这个扩展包 用着感觉真好…

费话就不多说了 直接开始

One

安装 Laravel 5.5

composer create-project laravel/laravel Role --prefer-dist

安装成功后在本地配置环境 我使用的是phpstudy 如何配置我就不写了 基本都会
在这里插入图片描述
打开浏览器出现这个界面 就OK了!

Two

根据自己项目配置Laravel .env 文件
开始安装扩展

composer 安装:

composer require spatie/laravel-permission

发布 migration :

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"

发布成功 会在database\migrations 下生成数据迁移文件
在这里插入图片描述

数据库版本太低 修改app里的providers里的AppServiceProvider.php文件

在boot()方法里写

\Schema::defaultStringLength(191);

这是设置数据库默认的字符长度

然后执行数据迁移

php artisan migrate

在这里插入图片描述

即 迁移成功

Three

首先,添加 Spatie\Permission\Traits\HasRoles trait 到 User 模型:

use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;

    // ...
}

在web写 一个测试路由

Route::get('/test','TestController@test'); 

去控制器里写一个测试 添加角色

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

class TestController extends Controller
{
    public function test()
    {
        //添加角色
        Role::create(['name' => 'writer']);
    }
}

需 use Role 和 Permission 这两个 Eloquent 模型

这时数据库便会新增一条数据
在这里插入图片描述

添加权限:

Permission::create(['name' => 'edit articles']);

将多个权限同步赋予到一个角色:

$role->syncPermissions($permissions);

$permissions 可以是一个数组 例如:

$role->syncPermissions(
            [
                'edit articles',
                'B'
            ]
        );

还有其他方法可以查看 这篇文章

然后在模板中判断角色是否拥有权限:

@can('edit articles')
  //
@endcan

在这里插入图片描述

在这里插入图片描述

最基本的权限已经设置好了

更多高级用法 可以查看文档完成 如果碰到了 还会继续更新

有问题 请留言

猜你喜欢

转载自blog.csdn.net/qq_43003944/article/details/83109608