【问题标题】:How to allow access to the same controller by both admin and user in laravel?如何允许管理员和用户在 laravel 中访问同一个控制器?
【发布时间】:2018-09-02 20:02:53
【问题描述】:

我有两个警卫adminusers,这里users 是不同类型的

-users -BD -SPOC -RECRUITOR -LEADERSHIP

现在我有一些控制器,我希望管理员和用户都可以访问。如果其中有人登录。但我不想让其他任何人在没有登录的情况下访问它。

这是我的控制器

类 AdminController 扩展控制器 {

protected $redirectTo = '/admin/dashboard';
protected $redirectAfterLogout = '/admin/login';

public function __construct()
{
    $this->middleware('auth:admin');
}

}

在上面的控制器中,如果我使用中间件-auth:admin,那么只有管理员才能访问它,如果我只使用中间件-auth,那么我会将用户带到用户登录屏幕。我想要管理员或管理员之间的任何人领导类型的用户已登录,然后他们就可以访问此控制器。

我希望或条件在中间件​​中检查这个或那个,即 auth 或 auth:admin 之间的中间件,而不是两者 我该怎么做呢? 我正在使用laravel.我是新手,请帮忙

【问题讨论】:

  • Laravel 使用中间件来处理请求。您可以在路由中指定中间件。您还可以使用 __construct() 函数来指定访问控制器方法的权限。阅读文档Middleware

标签: php laravel


【解决方案1】:

您可以在您的controllers 中使用多个middlewares

public function __construct()
    {
        $this->middleware('auth:web,admin');
    }

Adminuser 都可以访问页面

你可以在你的路线上做同样的事情

Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => ['auth:web,admin']], function() {
Route::get('url','somecontroller@method');
});

你需要以上之一

Web 是在 config/auth.php 中定义的默认 guard

当你在某处使用它时

public function __construct()
        {
            $this->middleware('auth');
        }

和下面的一样,因为web guard是默认放置的

public function __construct()
        {
            $this->middleware('auth:web');
        }

【讨论】:

  • 我希望如果用户已登录,那么他也将能够访问它,如果管理员已登录,那么也能够访问它。我想要检查两者中的任何一个而不是两者的中间件
  • 在 auth 和 auth:admin 之间检查的中间件
  • web 是默认守卫,您可以使用web 作为用户guard
【解决方案2】:

您可以使用Middleware 概念。中间件正在检查路由文件。以下方式检查用户身份验证。

Route::group(['middleware' => 'admin.user'], function () {
// Your routes which you want to allow after login
}

【讨论】:

    猜你喜欢
    • 2014-11-11
    • 1970-01-01
    • 2014-07-16
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多