在laravel中没有包的情况下将一条路由分配给多个用户

Posted

技术标签:

【中文标题】在laravel中没有包的情况下将一条路由分配给多个用户【英文标题】:Assigning one route to multiple user without a package in laravel 【发布时间】:2020-11-17 16:04:46 【问题描述】:

我创建了四个用户类型admin,vendor,employee,customer。在用户迁移文件中,我有以下内容:

public function up()

    Schema::create('users', function (Blueprint $table) 
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->char('contact',24)->nullable();
        $table->string('password');
        $table->enum('roles',['admin', 'vendor', 'employee', 'customers']);
        $table->string('image')->nullable();
        $table->timestamps();
    );

我已经为所有用户类型创建了中间件。 管理中间件

public function handle($request, Closure $next)

    if ($request->user()->roles == 'admin')
        return $next($request);
     else 
        return redirect()->route($request->user()->roles);
    

客户中间件

public function handle($request, Closure $next)

    if ($request->user()->roles == 'customer')
        return $next($request);
     else 
        return redirect()->route($request->user()->roles);
    

供应商中间件

public function handle($request, Closure $next)

    if ($request->user()->roles == 'vendor')
        return $next($request);
     else 
        return redirect()->route($request->user()->roles);
    

员工中间件

public function handle($request, Closure $next)

    if ($request->user()->roles == 'employee')
        return $next($request);
     else 
        return redirect()->route($request->user()->roles);
    

我已经在Kernel.php 中包含了所有中间件。 现在我想将一条路线分配给多个用户。例如,管理员和供应商可以addeditupdatedelete 产品,而员工只能edit,她/他既不能add 也不能delete。我只想敏感路由到管理员。

非常感谢您的解释!

【问题讨论】:

如果您处于早期设计阶段,我肯定会考虑使用 Gates,如laravel.com/docs/7.x/authorization 所述。可能会给你更细粒度的控制.. 盖茨就像@wschopohl 所说的那样好。您也可以查看政策,laravel.com/docs/7.x/authorization#creating-policies。 @wschopohl 谢谢,但我还没有处于开发的早期阶段。此功能是后来添加的。 @KurtFriars 你能帮忙解决这个问题***.com/questions/63167346/…吗? 强烈建议不要在数据库中使用枚举类型,在解决它之前(将来)会产生更多问题。 【参考方案1】:

也许另一个这个解决方案比有多个中间战更好。顺便说一句,他们都在做同样的事情。所以构建一个中间件并传递你需要的使用角色:) 这个链接是伟大而简单的例子:

https://github.com/spatie/laravel-permission/blob/master/src/Middlewares/RoleMiddleware.php

所以你会:

Route::middleware('roles:admin|customer')->get('/user', function () );

【讨论】:

以上是关于在laravel中没有包的情况下将一条路由分配给多个用户的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有范围的情况下在 laravel 路由中使用自定义键?

如何在没有 DB 的情况下将 sql 查询更改为 laravel 模型查询

如何在没有休息调用的情况下将 php json 变量分配给 angular?

如何在没有用户停机的情况下将我的 CloudFront 分配替换为另一个

在没有 Angular 的情况下将 UI 路由器状态解析为 URL

如何在没有新服务器请求的情况下将下载的图像从父路由传递到子路由