【发布时间】:2021-10-25 01:17:15
【问题描述】:
这会是一个有点长的问题,我正在完成我的申请,但在结束之前还有一些事情要做。
起初:我做了一些 POST 表单/功能。它们运行良好,但如果我不传递其中一个 $request 数据,它带有 SQL 错误,我读到它来管理我需要验证,所以我用验证规则制作了 Request 模型,但我不知道如何实现它进入我的控制器类。
这看起来像我的请求模型并在控制器内部创建类:
public function create(Request $request)
{
$id = Auth::id();
$event = new Event;
$event->name = $request->name;
$event->description = $request->description;
$event->address = $request->address;
$event->date_of_event = $request->date_of_event;
$event->displayed = 0;
$event->photo_patch = $request->photo_patch->store('images','public');
$event->club_id = $request->club_id;
$event->user_id = $id;
$event->save();
return redirect('events');
}
------------Request---------------------------
return [
'name' => 'required|max:50',
'description' => 'required|max:100',
'address' => 'required|max:63',
'date_of_event' =>'required',
'photo_patch' =>'required',
'club_id' =>'required',
];
要保护的第二件事是为管理员和用户拆分视图,因为我通过 Gate(admin-level) 使用 db admin(boolean) 中的列进行了授权
我正在考虑像这样进行验证:
public function index()
{
$id = Auth::id();
if (Gate::authorize('admin-level')){
$events = Event::get();
}
else{
$events = Event::where('user_id',$id)->get();
}
return view('backend/event/index', ['events' => $events]);
}
但随后出现错误:
Non static method 'authorize' should not be called statically.
有没有办法绕过它?或者,有没有更好/更简单的授权方式?
我的第三个问题是保护用户免受其他用户的更改。
这是什么意思。
每个用户只能访问他自己的俱乐部/活动,但如果有人将 url 例如其他 ID,他可以编辑他想要的每个俱乐部/活动。我该如何预防?
我的最后一个问题 我正在使用中间件身份验证来保护我的路由,有没有更好的方法来做到这一点?
Route::middleware(['auth'])->group(function() {
提前感谢您的回答。
【问题讨论】:
-
一问三问,让问题变得非常复杂。这可能意味着您的问题将来不会得到回答,因为您有点要求人们回答所有 3 个问题。
-
@mrhn 我必须在 stackoverflow 上发送 3 个问题,这可能需要我 3 个小时,因为您可以每 90 分钟问一次。
-
我明白了,但仍然认为将其组合在一起更合乎逻辑。因为 stackoverflow 也适用于下一个面临相同问题的人,并且将问题分组在一起使得索引变得更加困难。同时,stackoverflow 也希望是二进制的,应该有一个可以说是最好的答案,而不是固执己见,你输入的问题越多,答案就会越模糊。只是一个想法,对于这个很好:)