Php 正在验证控制器内部的用户访问权限
我刚开始学习Laravel5.7,想知道是否有更简单的方法来验证特定用户是否有权编辑、删除或查看页面 场景 用户有许多公司,可以查看、编辑和删除这些公司。因此,如果他们试图访问一个他们不属于的公司名称(id),他们会得到“访问餐”或其他东西。我的问题是我不停地重复我的代码,这看起来很没有效率 示例代码:Php 正在验证控制器内部的用户访问权限,php,laravel,Php,Laravel,我刚开始学习Laravel5.7,想知道是否有更简单的方法来验证特定用户是否有权编辑、删除或查看页面 场景 用户有许多公司,可以查看、编辑和删除这些公司。因此,如果他们试图访问一个他们不属于的公司名称(id),他们会得到“访问餐”或其他东西。我的问题是我不停地重复我的代码,这看起来很没有效率 示例代码: public function edit($id) { // Check if the company ID exists if(!Company::whereId($id)-
public function edit($id)
{
// Check if the company ID exists
if(!Company::whereId($id)->first() || !Company::whereId($id)->where('user_group',Auth::user()->user_group)->first())
{
return abort(404);
}
return view('company/edit');
}
因此,在我的示例中,我检查公司的ID是否存在,公司和用户组是否具有相同的ID。但是,我需要为“show”方法以及具有相同场景的任何其他方法(包括其他控制器)重复此代码
我怎样才能让我的生活更轻松呢?最佳做法是什么?举个例子就好了。干净的方法是使用Laravel
有很多方法可以做到这一点,我相信解决你问题的最好方法就是使用。策略可以被视为用户和模型(在您的案例中是公司)之间的链接。您可以指定创建、显示、更新和删除方法,并指定用户是否应该能够执行特定操作
策略通过它们的一般用法发挥作用,您不必检查用户是否可以在代码中的任何其他地方查看特定的公司,只需一次且雄辩地处理其余部分。我们通过中间件完成了这项工作。您可以在数据库上创建一个用户访问表,并创建一个中间件来检查用户是否具有访问权限。然后,如果表上存在访问权限,则允许,否则重定向。但是,这种方法仅适用于用户类型级别,而不适用于特定用户。查看门或策略,这应该允许代码在控制器之间重用。盖茨:。策略:是的,这是存储信息的正确方法(使用验证类)。但是,这与显示视图有关。我没有在我的场景中存储信息。请尝试创建您自己的服务,作为一个单件,负责(方法)检查数据,例如(isCompanyExists(),isUserActive())谢谢!这看起来干净多了。
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
// Store the blog post...
}