针对不同用户类型的 Laravel Route->middleware('auth')

问题描述 投票:0回答:1

我一直在想办法让 3 种类型的用户访问页面:

  1. guest
  2. admin
  3. 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 个访问层的方法,因为普通用户可以访问管理页面。

laravel routes laravel-middleware
1个回答
0
投票

你可以用警卫来处理它。 在 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 指令

你可以在这里获得更多信息

© www.soinside.com 2019 - 2024. All rights reserved.