【问题标题】:Laravel 4: Separate superadmin authLaravel 4:单独的超级管理员身份验证
【发布时间】:2014-07-05 01:06:58
【问题描述】:

我希望能够为管理员用户提供与普通用户不同的登录机制。普通用户的身份验证是 Laravel 的默认方式。使用用户表和用户模型。

对于我们的内部管理员部分(超级管理员),我更喜欢使用基本的 http 身份验证,而不使用 users 表,但根本不使用表,或者一个新的 superadmins 表只包含可以登录到超级管理员的用户。

最好的方法是什么?是否有某种方法可以硬编码一些超级管理员登录凭据,或者是否需要超级管理员表?我正在考虑编写自定义身份验证驱动程序,但如何仅为超级管理员部分加载自定义身份验证配置文件?自定义身份验证驱动程序最好使用不同的 cookie 名称,因为我们的超级管理员用户需要能够以用户身份登录,而无需经常重新登录超级管理员。

【问题讨论】:

  • 也许您可以使用/adminadmin. 作为URL,将它们全部放入不同超级管理员控制器的路由组中,然后使用.htaccess 来保护.htpasswd 文件?
  • 为什么不在用户表“超级用户”上有一列?那么就以正常方式进行身份验证?似乎很多头痛/工作没有太多收获。

标签: laravel laravel-4


【解决方案1】:

自定义身份验证驱动程序最好使用不同的 cookie 名称,因为我们的超级管理员用户需要能够以用户身份登录,而无需经常重新登录超级管理员。

这没有意义。无论您如何设置 cookie,您都不能同时以两个不同的用户身份登录。您需要某种方式在它们之间“切换”。

我个人认为你做这件事太难了。只需在您的用户表中有一个“超级用户”列。然后在您以正常方式登录后 - 您可以执行类似的操作

Filters.php

Route::filter('auth.superuser', function()
{
    if ( ! (Auth::user()->isSuperUser())) return Redirect::to('/');
});

然后在你的路由文件中:

// Normal routes here
Route::get('/', ['uses' => 'FrontController@showHomePage']);

Route::group(['before' => 'auth.superuser'], function ()
{
     // Superuser routes here
}

编辑 - 如果你想允许他们在超级用户和另一个用户之间“切换” - 然后做这样的事情:

function login()
{
      // login code here
      if Auth::user()->isSuperUser()
      {
          $cookie = Cookie::forever('superuser', 'really_long_secret_token');
          // Return with redirect AND cookie
      }
}

然后在您的仪表板或任何地方 - 您可以这样做:

@if (Cookie::get('superuser') === 'really_long_secret_token')
        Show superuser switch option here
@endif

无论他们当前是否以超级用户身份登录,这都会起作用 - 因为计算机上的 cookie 使他们能够随时切换到超级用户

【讨论】:

  • 您的回答似乎很可接受,似乎是一个很好的解决方案。但仍然是一个问题。为什么不可能有 2 个不同的身份验证 cookie?我们的超级管理员的主要用途之一是超级管理员将具有使用Auth::loginUsingId() 以xxx 身份登录的功能,如果我没记错的话,它将为该用户设置身份验证cookie,覆盖超级管理员用户。这就是我想将这两种用户分开的主要原因..
  • 但是 Laravel 如何知道在任何给定时间点你“想要”成为哪一个 - 你需要在它们之间“切换”。因此,拥有两个 cookie 并不能让您同时成为两个人 - 您必须成为其中之一。
  • 这确实是问题所在,让 laravel 为超级管理员控制器加载不同的身份验证提供程序。这就是为什么我正在考虑创建一个自定义身份验证提供程序,它与普通的身份验证提供程序基本相同,但使用超级管理员表(或硬编码数组)并设置不同的 cookie。
  • 如果以 xxx 身份登录不是必需的功能,我当然会采用您建议的解决方案。但我敢肯定,如果他们不断地重新登录超级管理员,他们会抱怨的。该开关仅在以超级管理员身份登录时才起作用。以普通用户身份登录后,我无法显示开关。
  • 谢谢!我要做的是将cookie 检查放在Auth::user()->isSuperUser() 函数中。这样超级管理员将能够访问超级管理员页面,无论他们当前是否以普通用户身份登录。
猜你喜欢
  • 2015-08-04
  • 2014-10-08
  • 2019-05-29
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 2016-04-19
  • 1970-01-01
相关资源
最近更新 更多