laravel的权限管理api

一、权限管理

1.1 安装权限组件及配置

运行
运行命令:composer require spatie/laravel-permission
在这里插入图片描述
文档基础介绍


运行命令php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations" 生成迁移文件:
在这里插入图片描述
在这里插入图片描述


2021_08_30_195803_create_permission_tables.php中增加两个字段,用来展示权限中文名称:
在这里插入图片描述

输入命令:php artisan migrate 生成相关的表:
在这里插入图片描述
在这里插入图片描述
可以看到生成了很多跟权限相关的表。


运行命令php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"生成配置信息。
在这里插入图片描述


User模型进行调整:
在这里插入图片描述

1.2 创建权限填充文件(角色、权限)

和菜单、商品一样,我们权限也是用数据填充的方式,将现有基础的权限填充,而不是一个个手动录入,后期根据管理员的需求自己也可以手动录入。
在这里插入图片描述
权限名字需要唯一,刚好路由名字也是唯一,采用路由名字,针对那些我们自己定义的路由,没有路有别名,我们采用,自己手动写入路由别名:
在这里插入图片描述
其他的类似。


运行命令:php artisan make:seeder PermissionSeeder
在这里插入图片描述
写入(写一组用户的,其他的类似):

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;

class PermissionSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // 添加之前情况缓存
        app()['cache']->forget('spatie.permission.cache');

        // 添加权限
        $permissions = [
            // 权限名字需要唯一,刚好路由名字也是唯一,采用路由名字
            ['name' => 'users.index', 'cn_name' => '用户列表', 'guard_name' => 'api'],
            ['name' => 'users.show', 'cn_name' => '用户详情', 'guard_name' => 'api'],
            ['name' => 'users.lock', 'cn_name' => '用户禁用启用', 'guard_name' => 'api'],
            // ...有时间再补全,以及补全自定义路由的别名。

        ];

        // 添加权限
        foreach($permissions as $p) {
            Permission::create($p);
        }

        // 添加角色
        $role = Role::create(['name' => 'rootadmin', 'cn_name' => '超级管理', 'guard_name' => 'api']);

        // 为角色添加权限 所有权限给到超级管理员
        $role->givePermissionTo(Permission::all());
    }
}

运行填充命令:php artisan db:seed --class=PermissionSeeder
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到角色表和权限表以及角色关联权限表的数据都一一对应。


1.3 创建用户填充文件

运行命令 php artisan make:seed UserSeeder
在这里插入图片描述
写入代码:

<?php

namespace Database\Seeders;

use App\Models\User;
use Illuminate\Database\Seeder;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // 创建用户
        $user = User::create([
            'name' => '超级管理员',
            'email' => 'super@a.com',
            'password' => bcrypt('123456')
        ]);

        // 给用户分配角色
        $user->assignRole('rootadmin');
    }
}

运行命令php artisan db:seed --class=UserSeeder执行填充文件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到id为7的用户角色role_id为1既超级管理员,超级管理员又具备这么多权限。


可以看到填充文件如果很多的话,我们每个都要去写,所以我们可以写在DatabaseSeeder.php中:
在这里插入图片描述
所以我们运行多个填充文件时只需要运行一次命令:php artisan db:seed默认执行DatabaseSeeder.php

1.4 验证权限(测试)

使用我们分配的超级管理员账号去登陆:
在这里插入图片描述
将获取到的tokenpostman中替换:
在这里插入图片描述


运行命令php artisan make:middleware CheckPermission创建中间件用来测试用户是否有权限:
在这里插入图片描述
写入:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class CheckPermission
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        // dd($request->route()->getName());
        /**
         * 检查用户权限,验证用户是否有权限
         */ 
        // 获取用户信息
        $user = auth('api') -> user();

        if (!$user->can($request->route()->getName())) {
            abort(403);
        }

        return $next($request);
    }
}

中间配置完之后在Http/Kernel.php中配置:

 'check.permission' => \App\Http\Middleware\CheckPermission::class,

在这里插入图片描述


admin.php路由增加中间件:
在这里插入图片描述


测试:
在这里插入图片描述
在这里插入图片描述
可以看到有权限的正常返回,没有权限的403。

在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你华还是你华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值