【问题标题】:Laravel Auth to validate only admin/superuserLaravel Auth 仅验证管理员/超级用户
【发布时间】:2015-04-24 08:42:06
【问题描述】:

我在 Windows 开发机器上使用 Laravel 5。我想在整个应用程序中自定义和使用 Auth 中间件,以维护身份验证。 我的用例是标准用例。有两种(或三种)用户类别 - AdminRegular(regular 是所有非管理员用户)。

Admin 具有明显的后端管理作用,因此有一个单独的路由组 /admin/,它应该将未登录的用户重定向到 /admin/login。我已经这样设置了..

Route::group(['middleware'=>'auth', 'prefix' => 'admin'], function() {
  Route::get('login','App\AuthController@getLogin');
  Route::post('login','App\AuthController@postLogin');
});

登录表单发布时,如何要求Auth添加过滤器

  • 是否仅从 'is_admin' 为 true 的用户中验证
  • 还是要求它首先加入一个用户和一个 UserRoles 表以仅识别具有管理员角色的用户?

【问题讨论】:

  • 加了Auth中间件怎么能看到登录页面?
  • 如果我的回答对您有所帮助,那么如果您也将其标记为已接受,那就太好了。谢谢!

标签: php laravel authorization laravel-5


【解决方案1】:

我建议您定义另一个中间件来检测用户是否是管理员而不是修改身份验证。现在将另一个中间件添加到只有管理员可以访问的路由中。

像这样添加几个中间件来路由

Route::group(['middleware' => ['auth','admin']], function() {

中间件看起来像

public function handle($request, Closure $next) {
  if (Auth::user()->role == "admin") {
    return $next($request);
  } else {
    return redirect("/")->withMyerror("You are not authorized for this action");
  }
}

【讨论】:

  • 谢谢,你的解决方案确实很实用。我在此之前也退出了 Auth 以严格对待普通用户不要尝试。
【解决方案2】:

为什么不处理 Auth 过滤器并尝试仅在特定条件下“验证”,在您的登录代码中,只需检查用户的类型是什么?

这是我的高级代码:

        // get roles which are allowed to login to the admin panel
        $roles = $this->userService->adminRoles(); 

        $user = User::whereUsername(Input::get('username'))->whereIn('role_id', $roles)->first();

        if (is_null($user)) {
            // ...
        }

        // create our user data for the authentication
        $userdata = array(
            'username' => Input::get('username'),
            'password' => Input::get('password'),
        );

        // attempt to do the login
        // Auth::attempt($userdata) ....

这样你在尝试登录时只做一次就可以了?

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2016-03-05
    相关资源
    最近更新 更多