Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正在验证控制器内部的用户访问权限_Php_Laravel - Fatal编程技术网

Php 正在验证控制器内部的用户访问权限

Php 正在验证控制器内部的用户访问权限,php,laravel,Php,Laravel,我刚开始学习Laravel5.7,想知道是否有更简单的方法来验证特定用户是否有权编辑、删除或查看页面 场景 用户有许多公司,可以查看、编辑和删除这些公司。因此,如果他们试图访问一个他们不属于的公司名称(id),他们会得到“访问餐”或其他东西。我的问题是我不停地重复我的代码,这看起来很没有效率 示例代码: public function edit($id) { // Check if the company ID exists if(!Company::whereId($id)-

我刚开始学习Laravel5.7,想知道是否有更简单的方法来验证特定用户是否有权编辑、删除或查看页面

场景

用户有许多公司,可以查看、编辑和删除这些公司。因此,如果他们试图访问一个他们不属于的公司名称(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...
    }