一、权限管理
   
    
    
    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 验证权限(测试)
   
    使用我们分配的超级管理员账号去登陆:
    
    
    
    将获取到的
    
     token
    
    在
    
     postman
    
    中替换:
    
    
   
    运行命令
    
     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的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。