0

我有一个用户登录系统,包括两个步骤:

  1. 用户登录
    1. 尝试将用户绑定到 AD(这是 LDAP 身份验证模块)
    2. 如果用户可以通过 AD 登录,请检查用户是否存在于用户表中
    3. 如果用户表中不存在用户,请添加它们 - 只有“用户名”和“好名字”
      1. 如果添加了用户,他们将不属于任何团队,并且将被通知联系他们的经理以继续帐户设置。
    4. 将用户列加载到 Laravel 会话credentials中 - 所以现在我们有了 AD 登录名、“好”名(第一个最后一个)、选定的团队 ID 等。没有密码,因为用户已经过身份验证。
  2. 团队选择 - 表userTeams数据透视表。
  3. 将用户路由到团队仪表板

现在,我有这条路线:

// This group forces user to be logged in; auth() will check if user has selected a team and ensures the team exists.
Route::group(array('before' => 'auth'), function() {
  // Handle team - URL will be /dashboard -- Team controller based on view_name from `teamUsers` table

  $teamUser = php_sapi_name() == "cli" ? null : @TeamUser::find(Session::get('credentials.team'));
  if(!empty($teamUser)) {
    $team = ucfirst(strtolower($teamUser->teams()->first()->view_name));
    Route::controller('dashboard', 'Team'.$team.'Controller');
  }

  // Handle index
  Route::controller('/', 'IndexController');
});

但是,我不觉得这是一个非常优雅的解决方案 - 主要是因为我无法通过这种方法进行反向路由。

有什么提示或建议吗?

4

1 回答 1

1

我个人会选择在它自己的过滤器而不是路由组闭包中执行此逻辑,因为您所做的只是根据变量将用户“过滤”到不同的路由(与身份验证过滤器相同)。

更新

Route::filter('whatever', function()
{
  $teamUser = php_sapi_name() == "cli" ? null : @TeamUser::find(Session::get('credentials.team'));

  if ( empty($teamUser) )
    Redirect::route('IndexController');
});

Route::group(array('before' => 'auth|whatever', function()
{
  Route::controller('someController');
  Route::controller('/', 'IndexController');
}));
于 2013-06-20T16:59:02.583 回答