Laravel Backpack实现用户仅查看自身关联报名记录方案咨询
实现用户仅查看自身报名记录的方案
在Laravel Backpack框架下,要实现用户只能查看/修改自己的Inscription(报名)记录,核心是限制列表查询范围+控制操作权限,具体步骤如下:
1. 模型层添加查询作用域(可选但推荐)
在app/Models/Inscription.php中添加一个可复用的查询作用域,统一筛选当前用户的记录:
public function scopeMine($query) { return $query->where('user_id', auth()->id()); }
2. 在Crud控制器中限制列表查询
打开对应Inscription的Crud控制器(比如app/Http/Controllers/Admin/InscriptionCrudController.php),修改setupListOperation方法,强制列表只加载当前用户的报名记录:
public function setupListOperation() { // 保留原有字段配置 $this->crud->setColumns([...]); // 应用查询限制 $this->crud->query = $this->crud->query->mine(); // 若未定义作用域,也可直接写: // $this->crud->query = $this->crud->query->where('user_id', auth()->id()); }
3. 限制编辑/查看/删除操作权限
除了列表展示,还要确保用户无法操作不属于自己的记录,可在对应操作的setup方法中添加校验:
public function setupUpdateOperation() { $this->crud->setValidation(InscriptionRequest::class); $this->crud->addFields([...]); // 校验当前记录归属 $inscription = $this->crud->getCurrentEntry(); if ($inscription->user_id !== auth()->id()) { abort(403, '无权操作该记录'); } } // 查看操作同理校验 public function setupShowOperation() { $this->crud->setColumns([...]); $inscription = $this->crud->getCurrentEntry(); if ($inscription->user_id !== auth()->id()) { abort(403, '无权查看该记录'); } }
4. 可选:隐藏非自身记录的操作按钮
如果希望列表中仅显示自身记录的操作按钮(编辑/查看/删除),可在列定义中添加条件判断:
$this->crud->addColumn([ 'label' => '操作', 'type' => 'action', 'actions' => [ [ 'name' => 'show', 'label' => '查看', 'visible' => function($entry) { return $entry->user_id === auth()->id(); } ], // 编辑、删除按钮同理添加visible判断 ] ]);
完成以上配置后,用户登录后只能看到自己提交的报名记录,且无法对他人的记录进行任何操作。
内容的提问来源于stack exchange,提问作者Antop
相关产品推荐
相关产品推荐

