Laravel 11 角色和权限1--权限列表和新增权限

284 阅读2分钟

设置数据库

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=roles
DB_USERNAME=root
DB_PASSWORD=

执行迁移文件

php artisan migrate

安装Breeze

composer require laravel/breeze --dev
php artisan breeze:install

image.png

执行迁移文件
php artisan migrate
npm install

npm run dev

安装安装laravel-permission

laravel-permission文档地址

composer require spatie/laravel-permission

使用以下内容发布迁移和config/permission.php配置文件:

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

清除您的配置缓存。

此包需要访问permission配置设置才能运行迁移。使用命令清除配置缓存:

php artisan config:clear

运行迁移:

发布并配置配置和迁移后,您可以通过运行以下命令为此包创建表:

php artisan migrate

路由

Route::middleware('auth')->group(function () {
    .
    .
    .
    // 权限页面
    Route::get('/permission', [PermissionController::class, 'index'])->name('permissions.index');
    // 新增权限页面
    Route::get('/permissions/create', [PermissionController::class, 'create'])->name('permissions.create');
    // 执行新增权限
    Route::post('/permissions', [PermissionController::class, 'store'])->name('permissions.store');
});

创建控制器

php artisan make:controller PermissionController

App/Http/Controllers/PermissionController.PHP

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Spatie\Permission\Models\Permission;

class PermissionController extends Controller
{
    // 权限页面
    public function index()
    {
        return view('permissions.list');
    }

    // 创建权限页面
    public function create()
    {
        return view('permissions.create');
    }

    // 在数据库中插入一个权限
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|unique:permissions|max:20',
        ]);

        if ($validator->passes()) {
            Permission::create([
                'name' => $request->name
            ]);
            return redirect()->route('permissions.index')->with('success', '权限添加成功~~');
        } else {
            return redirect()->route('permissions.create')->withErrors($validator)->withInput();
        }
    }

}

前端模版

权限列表

resources/views/permissions/list.blade.php

<x-app-layout>
    <x-slot name="header">
        <div class="flex justify-between">
            <h2 class="font-semibold text-xl text-gray-800 leading-tight">
                {{ __('权限列表') }}
            </h2>
            <a href="{{ route('permissions.create') }}"
               class="bg-slate-700 text-sm rounded-md text-white px-5 py-3">新增</a>
        </div>
    </x-slot>

    <div class="py-12">
        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
            {{-- 表单成功验证 --}}
            <x-message></x-message>

            <table class="w-full">
                <thead class="bg-gray-50">
                <tr class="border-b">
                    <th class="px-6 py-3 text-left" width="60">#</th>
                    <th class="px-6 py-3 text-left">权限名字</th>
                    <th class="px-6 py-3 text-left" width="180">创建时间</th>
                    <th class="px-6 py-3 text-center" width="180">操作</th>
                </tr>
                </thead>
                <tbody class="bg-white">

                @if($permissions->isNotEmpty())
                    @foreach($permissions as $permission)
                        <tr class="border-b">
                            <td class="px-6 py-3 text-left">{{$permission->id}}</td>
                            <td class="px-6 py-3 text-left">{{$permission->name}}</td>
                            <td class="px-6 py-3 text-left">{{$permission->created_at}}</td>
                            <td class="px-6 py-3 text-center">
                                <a href=""
                                   class="bg-slate-700 text-sm rounded-md text-white px-3 py-2 hover:bg-slate-600">编辑</a>
                                <a href=""
                                   class="bg-red-600 text-sm rounded-md text-white px-3 py-2 hover:bg-red-500">删除</a>
                            </td>
                        </tr>
                    @endforeach
                @endif

                </tbody>
            </table>
        </div>
    </div>
</x-app-layout>
新增权限

resources/views/permissions/create.blade.php

<x-app-layout>
    <x-slot name="header">
        <div class="flex justify-between">
            <h2 class="font-semibold text-xl text-gray-800 leading-tight">
                权限 / 新增
            </h2>
            <a href="{{ route('permissions.index') }}"
               class="bg-slate-700 text-sm rounded-md text-white px-5 py-3">权限列表</a>
        </div>
    </x-slot>

    <div class="py-12">
        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
            <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
                <div class="p-6 text-gray-900">

                    <form action="{{ route('permissions.store') }}" method="post">
                        @csrf

                        <div>
                            <label for="" class="text-sm font-medium">权限名称</label>
                            <div class="my-3">
                                <input value="{{old('name')}}" name="name" placeholder="权限名单" type="text"
                                       class="border-gray-300 shadow-sm w-1/2 rounded-lg">

                                @error('name')
                                <p class="text-red-400 font-medium">{{ $message }}</p>
                                @enderror

                            </div>
                            <button class="bg-slate-700 text-sm rounded-md text-white px-5 py-3">提交</button>
                        </div>
                    </form>

                </div>
            </div>
        </div>
    </div>
</x-app-layout>
公用的验证提醒文件

resources/views/components/message.blade.php

{{-- 表单成功验证 --}}
@if(Session()->has('success'))
    <div class="bg-green-200 border-gray-600 p-4 mb-3 rounded-sm shadow-sm">
        {{ Session()->get('success') }}
    </div>
@endif
{{-- session函数来与用户会话中的错误信息 --}}
@if(Session()->has('error'))
    <div class="bg-green-200 border-red-600 p-4 mb-3 rounded-sm shadow-sm">
        {{ Session()->get('error') }}
    </div>
@endif