Php 如何为未在laravel获得批准的供应商提供限制路线?

Php 如何为未在laravel获得批准的供应商提供限制路线?,php,laravel,eloquent,laravel-authentication,Php,Laravel,Eloquent,Laravel Authentication,在我的laravel电子商务中,我有三种类型的用户:管理员、供应商、客户 现在,我必须限制那些供应商谁没有得到管理员批准的路线。 有人能告诉我这个过程吗 这是用户和商店的两张桌子 用户具有这些属性 id, name, password, email, phone 商店也有 shop_name, address, shop_phone, owner_id (this is a foreign key of users.id), is_approved(bool) 这里给出了用户的一个店铺关系

在我的laravel电子商务中,我有三种类型的用户:管理员、供应商、客户

现在,我必须限制那些供应商谁没有得到管理员批准的路线。 有人能告诉我这个过程吗

这是用户和商店的两张桌子

用户具有这些属性

id, name, password, email, phone
商店也有

shop_name, address, shop_phone, owner_id (this is a foreign key of users.id), is_approved(bool)
  • 这里给出了用户的一个店铺关系
现在我需要知道如何限制所有未经批准的授权路由意味着
is_approved==0
for shop

有人能帮我吗?

创建一个中间件:

php artisan make:middleware CheckIsApproved
Route::get('/some-route', 'SomeRouteController@show')->middleware('isApproved');
将在
app/Http/middleware/CheckIsApproved.php
fille中创建一个新的中间件类

然后在中间的
handle
方法中,您可以执行以下检查:

public function handle ($request, Closure $next)
{
    if (auth()->user()->shop->is_approved) {
        return $next($request);
    }

    return back()->with('error', 'Unauthorized');
}
(您可能需要根据关系在
if
中自定义条件)

在文件
app/Http/Kernel.php
中,注册中间件:search
$routeMiddleware
属性并添加:

protected $routeMiddleware = [
    //...
    'isApproved' => \App\Http\Middleware\CheckIsApproved::class,
];
然后,在路由定义中,可以指定中间件:

php artisan make:middleware CheckIsApproved
Route::get('/some-route', 'SomeRouteController@show')->middleware('isApproved');


查看以获取更多信息

您可以定义自己的中间件,然后将其分配给auth等路由。请看:请包括路由,因为没有em很难理解您要做什么。如果用户有两个商店,会发生什么?我想在构造中添加一个中间件。如果可能是供应商,但用户()->shops()->被激活==0,则返回登录页面。下一个就不去了。比如handle()。有可能吗?是的,有可能,但需要再次使用类似的方法。而不是这个
$this->middleware('newMiddleware')使用这个:
$this->中间件(函数($request,$next){/…})参见本节:@Iagbox:不完全正确。这里,
User
模型上的
shop
方法应该定义
User
shop
模型之间的关系。你是对的。我的意思是
auth()->user()->shop->已经批准了
。我已经更正了答案。很好,只是停止了下一个问题,因为他们无法解决一些错误:)谢谢你为他们的问题提供了答案顺便说一句,非常感谢你的回答,兄弟。这是我的工作。非常感谢。:)