Laravel关联模型中获取Permission ID实现权限删除的问题
解决方案
1. 调整User控制器的权限数组结构
当前生成的$perm数组以Permission ID为键、Profile ID为值,无法直接通过Profile ID反向查找对应Permission ID。修改pluck参数顺序,生成以Profile ID为键、Permission ID为值的数组:
public function edit(User $user) { // 移除未使用的Profile和Permission注入 $perm = Permission::where('user_id', $user->id) ->pluck('id', 'profile_id') // 键:profile_id,值:permission_id ->toArray(); return view('users.edit', compact('perm', 'user')) ->with('profiles', Profile::all()); }
2. 修复Blade模板的destroy路由参数
现在$perm数组可以通过当前循环的$profile->id直接获取对应Permission ID,替换模板中****位置:
@foreach($profiles as $key => $profile) @if(isset($perm[$profile->id])) {{-- 用isset替代in_array,更高效且安全 --}} <form action="{{ route('permissions.destroy', $perm[$profile->id]) }}" method="POST" > @csrf @method('DELETE') <input type="hidden" value="{{ $user->id }}" name="user_id" id="user_id" /> <input type="hidden" value="{{ $profile->id }}" name="profile_id" id="profile_id" /> <button class="btn btn-primary" type="submit">{{ $profile->profile_name }}</button> </form> @else <form action="{{ route('permissions.store') }}" method="POST" > @csrf <input type="hidden" value="{{ $user->id }}" name="user_id" id="user_id" /> <input type="hidden" value="{{ $profile->id }}" name="profile_id" id="profile_id" /> <button class="btn btn-secondary" type="submit">{{ $profile->profile_name }}</button> </form> @endif @endforeach
3. 简化Permission控制器的destroy方法(可选)
利用Laravel路由模型绑定,直接使用注入的Permission实例删除,无需重复查询:
public function destroy(Permission $permission) { // 可选:添加权限校验,确保操作的权限属于目标用户 // if ($permission->user_id !== $user->id) abort(403); $permission->delete(); return redirect()->back(); }
内容的提问来源于stack exchange,提问作者Leanne
相关产品推荐
相关产品推荐

