Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.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
如何使我的仪表板仅可供管理员和laravel中的卖家访问?_Laravel_Authentication_Admin_Middleware - Fatal编程技术网

如何使我的仪表板仅可供管理员和laravel中的卖家访问?

如何使我的仪表板仅可供管理员和laravel中的卖家访问?,laravel,authentication,admin,middleware,Laravel,Authentication,Admin,Middleware,DashboardController.php 类DashboardController扩展控制器 { 函数构造 { $this->middleware'auth'; } //代码。。。。。 } 最初,我为任何身份验证用户创建了一个访问此仪表板的中间线 目标:我想让这个仪表板只为管理员和卖家。使普通用户无法访问仪表板路由 怎么做 参考表 用户表 架构::创建“用户”,函数蓝图$表{ $table->id; $table->string'name'; $table->string'email'->

DashboardController.php

类DashboardController扩展控制器 { 函数构造 { $this->middleware'auth'; } //代码。。。。。 } 最初,我为任何身份验证用户创建了一个访问此仪表板的中间线

目标:我想让这个仪表板只为管理员和卖家。使普通用户无法访问仪表板路由

怎么做

参考表

用户表

架构::创建“用户”,函数蓝图$表{ $table->id; $table->string'name'; $table->string'email'->唯一; $table->string'photo'->可为空; $table->timestamp'email\u verified\u at'->可为空; $table->string'password'; $table->longText'cartitems'->可为空; $table->longText'wishlist'->可为空; $table->unsignedBigInteger“折扣”->default0; $table->rememberToken; $table->timestamps; }; 这是用户表

角色表

Schema::创建“角色”,函数蓝图$表{ $table->id; $table->string'name'; $table->string'display_name'; $table->timestamps; }; 这是角色表。每个用户都有一个角色,如超级管理员、管理员、卖家或客户

角色用户表

Schema::创建“角色\用户”,函数蓝图$表{ $table->id; $table->unsignedbiginger'user_id'; $table->foreign'user_id'->引用'id'->关于'users'->删除'cascade'; $table->unsignedbiginger'role_id'; $table->foreign'role_id'->引用'id'->关于'roles'->删除'cascade'; $table->timestamps; }; 在此透视表中,创建用户和角色之间的关系表

我试过这些步骤

DashboardController.php

函数构造 { $this->middleware'admin'; } Kernel.php

“admin”=>\App\Http\Middleware\admin::class, Admin.php[新的Middlewire]

公共函数handle$request,Closure$next { ddAuth::用户; } 但是这个Admin.php无法访问当前经过身份验证的用户

它显示空值

为了能够在中间件中使用auth->user,您需要在加载auth中间件之前使用它。有几种方法可以做到这一点,包括使用路由组直接为路由提供中间件。否则,Laravel将无法识别是否有已登录的用户

如果你不想这样做,还有另一种方法有点粗糙,但它同样很好,因为你正在编写自己的角色逻辑。您可以创建一个helper函数hasprole来执行相同的操作,并在控制器中使用它

编辑:这是我为权限而不是角色所做的事情,但我认为这可能会有所帮助:

if(!function_exists('hasPermission')){
    function hasPermission($permissionName){
        if(auth()->check()) {

            $user = \App\Admin::where('id', auth()->user()->id)->with('role.permissions')->first();
            $permission = \App\AdminPermissions::where('name', $permissionName)->first();
            return response()->json($user->role->permissions->contains($permission));

        } else {

            return 'Unauthenticated';
        }
    }
}

我也用类似的方法做过。但我没有面临任何问题


如果您将所有内容放在正确的位置,它应该会工作。

您是否使用任何角色权限包或您自己构建的?不,我没有使用任何包。我使用的只有laravel auth软件包。php公共函数处理$request,闭包$next{if Auth::user->role->name='admin'{return$next$request;}return Redirect::route'dashboard.index'//return$next$request;}。。。。尝试但是错误……哪个错误?请在您的问题中包含此代码?如何使用“hasRole”?请你帮帮我好吗。这是否应该写入关系的用户模型?@ImrulHasan我通常创建一个名为helpers.php的文件,并在其中包含我的所有helper函数。然后我将它包括在composer自动加载数组中,并可以在任何地方使用它。至于hasRole$role函数本身,它基本上执行auth->check,然后使用与用户模型的角色关系来检查这个用户是否拥有这个角色。如果你给我一些关于这个角色的参考链接。这会有帮助的。我缺乏这方面的知识。@ImrulHasan如果您需要,我为助手函数制作了一个文档,并为角色编写了一个代码。@ImrulHasan这是一个帮助助手函数的链接。我会在我的答案中添加hasRole的代码