You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:56:06