laravel-admin,用户登录后只能编辑自己的数据。

1. 运行环境

1). 当前使用的 Laravel8?

2). 当前使用的 laravel-admin1.8 版本

PHP 版本:7.3

项目使用的laravel-admin1.8,列表中我使用了where条件只能查询出自己的数据,但是在编辑数据时,我尝试通过修改链接中的ID果然可以跳转到别人的数据,这样安全隐患十分大,我尝试写了一个简单验证,发现出现了报错,想问下各位大佬有没有更好的解决办法?万分感谢!

简单的验证:
laravel-admin,用户登录后只能编辑自己的数据。

所报错误:

laravel-admin,用户登录后只能编辑自己的数据。

laravel-admin,用户登录后只能编辑自己的数据。

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

你找错地方了,AdminController 控制器本身就有 edit 方法,你不应该在 form 方法中添加判断

public function edit($id, Content $content)
    {
        if($id !== Admin::user()->id)
        {
            abort(403, '非法访问');
        }
        return $content
            ->translation($this->translation())
            ->title($this->title())
            ->description($this->description()['edit'] ?? trans('admin.edit'))
            ->body($this->form()->edit($id));
    }

覆写一下 edit 方法,搞定收工

2年前 评论
诺大的院子 2年前
MArtian (作者) 2年前
myhui0926 2年前
诺大的院子 2年前
MArtian (作者) 2年前
MArtian (作者) 2年前
sunxbiao (楼主) 2年前
MArtian (作者) 2年前
讨论数量: 15

其实我也考虑过这种问题,但是实际需求中没有遇到这样的需求,如果遇到我觉得用作用域处理好一点

2年前 评论

加上权限就行了

2年前 评论

报错栈没有,没法确认是哪的问题

2年前 评论

非自己内容不可编辑吗?

if ( Admin::user()->id != $from->user_id ) {
...
}
2年前 评论

我是在所有需要区分用户的地方加上了用户id的判断

2年前 评论

你找错地方了,AdminController 控制器本身就有 edit 方法,你不应该在 form 方法中添加判断

public function edit($id, Content $content)
    {
        if($id !== Admin::user()->id)
        {
            abort(403, '非法访问');
        }
        return $content
            ->translation($this->translation())
            ->title($this->title())
            ->description($this->description()['edit'] ?? trans('admin.edit'))
            ->body($this->form()->edit($id));
    }

覆写一下 edit 方法,搞定收工

2年前 评论
诺大的院子 2年前
MArtian (作者) 2年前
myhui0926 2年前
诺大的院子 2年前
MArtian (作者) 2年前
MArtian (作者) 2年前
sunxbiao (楼主) 2年前
MArtian (作者) 2年前

写个拦截器,加到路由中间件里, 用户授权《Laravel 8 中文文档》

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!