Backpack v6中如何条件隐藏多对多关系的+New Item按钮?
基于模型状态隐藏多对多关系的“+ New Item”按钮并保留编辑删除权限
针对你的需求,在Backpack for Laravel中可以通过字段的create属性结合模型状态判断来实现,同时保留管理员对现有关联条目的编辑、删除权限。
实现方案
直接在你的relationship字段配置中添加create、update、delete回调,通过条件判断控制对应权限:
修改后的完整代码
CRUD::field('userAllocations')->type('relationship') ->subfields([ [ 'name' => 'user', 'ajax' => true, 'attribute' => 'reverse_full_name', 'wrapper' => ['class' => 'form-group col-md-9'], ], [ 'name' => 'valid_date', 'type' => 'date', 'wrapper' => ['class' => 'form-group col-md-3'] ], ]) // 控制是否显示"+ New Item"按钮,禁止创建新关联 ->create(function ($entry) { // 替换成你的模型状态判断逻辑,比如模型状态为"已锁定"时隐藏按钮 if ($entry->status === 'locked') { return false; } // 若需要管理员例外(比如管理员即使状态锁定也能创建),可以添加权限判断 // return !($entry->status === 'locked') || auth()->user()->hasRole('admin'); return true; }) // 确保管理员可编辑现有关联 ->update(function ($entry) { return auth()->user()->hasRole('admin'); // 替换成你的管理员权限判断逻辑 }) // 确保管理员可删除现有关联 ->delete(function ($entry) { return auth()->user()->hasRole('admin'); });
关键细节
create回调:返回false时,不仅会隐藏前端的"+ New Item"按钮,还会在后台层面禁止创建新的关联条目,完全符合你"禁止创建关系"的需求。update/delete回调:单独控制编辑、删除权限,确保管理员能操作已有的关联条目,包括修改中间表的valid_date字段。- 状态判断灵活:你可以根据模型的任意字段(比如
status、is_active等)调整create回调的条件,适配不同业务场景。
内容的提问来源于stack exchange,提问作者Bluebox
相关产品推荐
相关产品推荐

