Laravel中如何限制管理员删除:防删自身及管理员数量归零
Laravel中管理员删除功能的权限控制实现
一、后端数据展示层优化(隐藏无权限删除按钮)
先修改apiAdmins方法,在生成操作按钮时判断两个核心条件,只有满足时才显示删除按钮,提升用户体验:
public function apiAdmins() { $admins = User::all(); $currentUserId = auth()->id(); $adminCount = $admins->count(); return Datatables::of($admins) ->addColumn('action', function($admin) use ($currentUserId, $adminCount) { // 仅当待删除账号不是当前登录用户,且管理员总数>1时,显示删除按钮 if ($admin->id !== $currentUserId && $adminCount > 1) { return '<a onclick="deleteData('. $admin->id .')" class="btn btn-danger btn-xs"> <i class="glyphicon glyphicon-trash"></i> Delete </a>'; } // 不满足条件时返回空占位 return ''; }) ->rawColumns(['action'])->make(true); }
二、后端删除控制器核心校验(防止前端绕过)
找到管理员删除对应的destroy方法,添加严格的权限校验——这是安全控制的核心,必须实现:
public function destroy($id) { $currentUser = auth()->user(); $targetAdmin = User::findOrFail($id); $adminCount = User::count(); // 校验1:禁止删除当前登录的自身账号 if ($targetAdmin->id === $currentUser->id) { return response()->json(['message' => '无法删除当前登录的管理员账号'], 403); } // 校验2:禁止删除到管理员数量为0 if ($adminCount <= 1) { return response()->json(['message' => '必须保留至少一名管理员'], 403); } // 校验通过,执行删除 $targetAdmin->delete(); return response()->json(['message' => '管理员删除成功']); }
三、前端错误提示优化
修改deleteData函数,适配后端返回的错误信息,让用户能清晰知道操作失败原因:
function deleteData(id) { var csrf_token = $('meta[name="csrf-token"]').attr('content'); swal({ title: '确认删除?', text: "此操作不可撤销!", type: 'warning', showCancelButton: true, cancelButtonColor: '#d33', confirmButtonColor: '#3085d6', confirmButtonText: '确认删除!', cancelButtonText: '取消', }).then(function () { $.ajax({ url : "{{ url('admins') }}" + '/' + id, type : "POST", data : {'_method' : 'DELETE', '_token' : csrf_token}, success : function(data) { table.ajax.reload(); swal({ title: '删除成功', text: data.message, type: 'success', timer: '1500' }) }, error : function (xhr) { var errorMsg = xhr.responseJSON?.message || '删除失败,请稍后重试'; swal({ title: '操作失败', text: errorMsg, type: 'error', timer: '1500' }) } }); }); }
注意事项
- 前端隐藏按钮只是体验优化,必须依赖后端校验阻止非法操作,因为前端逻辑可以被绕过
- 两个校验条件需要同时在后端实现,确保数据安全
内容的提问来源于stack exchange,提问作者Cassey
相关产品推荐
相关产品推荐

