Laravel 4:具有两个可选值到用户类型的Auth凭证

时间:2013-07-05 08:23:47

标签: php laravel laravel-4 cartalyst-sentry

我有3种类型的用户:

  1. 客户端
  2. 管理
  3. 超级管理员
  4. 现在,我需要同时允许adminsuper admin登录我的管理门户网站,以便实现我们将以数据格式放入数组的身份验证,例如:

    $creds = array('username'=>Input::get('uname'),'password'=>Input::get('pwd'),'usertype'=>$utype);
    

    如果我只允许在admin数组中声明super admin一次,我如何同时允许Auth usertype$creds

3 个答案:

答案 0 :(得分:0)

将一些群组应用于您的用户,将用户添加到群组并对其进行验证。 (甚至,将ACL应用于组,并检查它) 未来是否需要更多类型的用户,您只需将它们添加到组中,而不是更改$ creds数组。

答案 1 :(得分:0)

我们都知道,如果我们要尝试进行授权,我们将传递一系列凭证。我的问题我的usertype可以有两个值(adminsuper admin),但是我们不能将两个usertype放在这样的数组中:

$creds = array('username'=>$uname,'password'=>$pwd,'usertype'=>'admin','usertype'=>'super admin');

解决方案:唯一的方法是对其进行分组(截至我想的那一刻。)

Route::filter('admin-auth', function(){
if(Auth::guest() || Auth::user()->usertype == 'client' || Auth::user()->active == 0) return Redirect::to('admin/login?ret='.Request::url());
});

注意:Redirect::to('admin/login?ret='.Request::url())是不可取的,因为如果您要在成功验证后将某人重定向到某个页面,则laravel已经具有Redirect::intended()功能,但是我这样做是因为我使用了ajax。

答案 2 :(得分:-1)

你可以使用我发现的小技巧。在凭证数组上,您可以将DB :: RAW添加到您的条件中:

$creds = array(
                'username'=> Input::get('uname'),
                'password'=> DB:RAW(Input::get('pwd') . ' and `usertype` in (your user types);

也许不是最好的解决方案,但它有效。您可以检查您的查询以确定它没问题