在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
中包含了所有中间件。
现在我想将一条路线分配给多个用户。例如,管理员和供应商可以add
、edit
、update
、delete
产品,而员工只能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 分配替换为另一个