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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:50:46