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 模型

这时数据库便会新增一条数据
在这里插入图片描述
如果报错There is no role named
就检查下guard_name的与 config/auth.php 的配置是否一致。

添加权限:

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

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

$role->syncPermissions($permissions);

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

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

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

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

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

在这里插入图片描述

在这里插入图片描述

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

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

有问题 请留言

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值