使用LDAP保护路由

时间:2016-06-13 11:02:46

标签: laravel laravel-5 active-directory laravel-5.1

我有些困惑。对于身份验证,我使用LDAP,更具体地说是https://github.com/SaschaDens/ldap-connector

我使用的LDAP库本质上是在Laravels身份验证外观之上工作。

一切都很好,我现在可以使用LDAP登录和退出。但是,登录后,我有一个更新用户按钮。这基本上使用LDAP来获取 用户分开的所有组。所以我有三张桌子,

users
groups
users_groups

按下按钮后,我将所有用户添加到users表。然后,我将所有唯一组添加到组表中。最后一个表users_groups本质上是一个数据透视表,它将users_id链接到groups_id。

到此结束时,我可以看到我是3组中的一组,其中一组是管理组。我也可以通过这样做看到这个小组的所有成员

$group = Group::where('groupName', 'admin')->first();
$users = $group->user;

现在有些路由我只想提供给管理员用户。我可以在Kernel.php中看到以下

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];

目前我只使用auth来确保用户已登录。显然我还没有设置管理员,我认为我这样做的方式可能会有问题,因为我正在创建我自己的小组表。

我如何才能阻止对特定路由的访问权限仅限于管理员组的用户?

由于

1 个答案:

答案 0 :(得分:1)

您可以通过创建新的路由中间件来实现此目的。

1)创建中间件类

php artisan make:middleware AdminMiddleware

2)向您的AdminMiddleware类添加身份验证逻辑

if(Auth::user()->inGroup('GROUPNAME')) 
{
    return $next($request);
}
else
{
    return view('auth.login')->withErrors('You are not logged in');
}

3)将新的中间件添加到$ routeMiddleware

'admin' => 'App\Http\Middleware\AdminMiddleware',

4)将中间件别名添加到您要保护的路由

Route::get('admin', [
    'as' => 'admin',
    'middleware' => 'admin',
    'uses' => 'AdminController@getAdminPage'
]);