我一直在想办法让 3 种类型的用户访问页面:
guest
admin
user
例如:
/homepage
和/login
/homepage
,/logout
和/manage
/homepage
、/logout
和/shopping/cart
Guest
未登录。Admin
和 User
共享一些路线,但并非所有路线都应在 2 之间平等访问
我一直在视图中使用解决方法来显示 3 个单独的显示:
@auth
// Paragraph seen by the user with name `admin`
@if(auth()->user()->attribute == 'admin')
<p>ADMIN</p>
// Paragraph seen by every other user
@else
<p>USER</p>
@endif
// Paragraph seen by guests
@else
<p>GUEST</p>
@endauth
这是为了使用用户的
attribute
值隐藏页面上的内容,但我想要一种在整个路由上应用 3 个访问层的方法,因为普通用户可以访问管理页面。
你可以用警卫来处理它。 在 config/auth.php 中定义你想要的守卫,如下所示:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
'adminapi' => [
'driver' => 'passport',
'provider' => 'admins',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
定义供应商:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => Modules\User\Entities\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => \Modules\Operator\Entities\Operator::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
之后你可以像这样在你的代码中使用它:
auth()->guard('admin') ?打印('管理员'):打印('用户')
或者在你的刀片中使用 @auth 指令