Laravel 11 角色和权限4--编辑角色和删除角色

45 阅读1分钟

角色编辑

路由
Route::middleware('auth')->group(function () {
    .
    .
    .
    // 编辑角色页面
    Route::get('/roles/{id}/edit', [RoleController::class, 'edit'])->name('roles.edit');
    // 执行编辑角色
    Route::post('/roles/{id}', [RoleController::class, 'update'])->name('roles.update');
    // 删除角色
    Route::delete('/roles', [RoleController::class, 'destroy'])->name('roles.destroy');
});
控制器 编辑功能

App/Http/Controllers/RoleController.php

// 编辑角色
public function edit($id)
{
    $role = Role::findOrFail($id);
    $hasPermissions = $role->permissions->pluck('name');
    $permissions = Permission::orderBy('name', 'ASC')->get();

    return view('roles.edit', compact('role', 'hasPermissions', 'permissions'));
}

// 执行编辑角色
public function update($id, Request $request)
{
    $role = Role::findOrFail($id);
    $validator = Validator::make($request->all(), [
        'name' => 'required|unique:roles,name,' . $id . ',id',
    ]);

    if ($validator->passes()) {
        $role->name = $request->name;
        $role->save();
        if (!empty($request->permission)) {
            $role->syncPermissions($request->permission);
        } else {
            $role->syncPermissions([]);
        }
        return redirect()->route('roles.index')->with('success', '角色编辑成功~~');
    } else {
        return redirect()->route('roles.edit')->withErrors($validator)->withInput();
    }
}
前端模版

resources/views/roles/list.blade.php 添加跳转页路由

<a href="{{ route('roles.edit',$role->id) }}"
   class="bg-slate-700 text-sm rounded-md text-white px-3 py-2 hover:bg-slate-600">编辑</a>

resources/views/roles/edit.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('roles.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('roles.update', $role->id) }}" method="post">
                        @csrf

                        <div>
                            <label for="" class="text-sm font-medium">角色名</label>
                            <div class="my-3">
                                <input value="{{old('name',$role->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>
                            <label for="" class="text-sm font-medium">权限</label>
                            <div class="grid grid-cols-4 mb-3">
                                @if($permissions->isNotEmpty())
                                    @foreach($permissions as $permission)
                                        <div class="mt-3">
                                            <input
                                                {{ ($hasPermissions->contains($permission->name)) ? 'checked' : '' }} type="checkbox"
                                                id="permission-{{ $permission->id }}" class="rounded"
                                                name="permission[]"
                                                value="{{$permission->name}}">
                                            <label for="">{{$permission->name}}</label>
                                        </div>
                                    @endforeach
                                @endif
                            </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>
控制器 删除功能

App/Http/Controllers/RoleController.php

// 删除角色
public function destroy(Request $request)
{
    $id = $request->id;
    $role = Role::find($id);

    if ($role == null) {
        session()->flash('error', '未找到角色~');
        return response()->json([
            'status' => false
        ]);
    }

    $role->delete();
    session()->flash('success', '角色删除成功~');
    return response()->json([
        'status' => true
    ]);
}
前端模版

resources/views/roles/list.blade.php

<a href="javascript:void(0);" onclick="deletePermission( {{$role->id}} )"
   class="bg-red-600 text-sm rounded-md text-white px-3 py-2 hover:bg-red-500">删除</a>

以上:onclick="deletePermission( {{$role->id}} )",删除按钮绑定。

  • 开始书写ajax无刷新删除
.
.
.
<x-slot name="script">
        <script type="text/javascript">
            function deletePermission(id) {
                if (confirm("您确定要删除么~~")) {
                    $.ajax({
                        url: '{{route('roles.destroy')}}',
                        type: 'delete',
                        data: {id: id},
                        dataType: 'json',
                        headers: {
                            'x-csrf-token': '{{ csrf_token() }}'
                        },
                        success: function (response) {
                            window.location.href = '{{ route('roles.index') }}';
                        }
                    });
                }
            }
        </script>
    </x-slot>
</x-app-layout>