使用LDAP保护路由

问题描述 投票:0回答:1

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

我正在使用的LDAP库本质上可以在Laravels Authentication Facade之上工作。

一切都很好,我现在可以使用LDAP登录和注销。 但是,登录后,我有一个更新用户按钮。 这实质上是使用LDAP来分离用户的所有组。 我有三张桌子

users
groups
users_groups

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

到此为止,我可以看到例如我属于3个组,其中一个是admin组。 通过执行此操作,我还可以看到该组的所有成员

$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来确保用户已登录。显然,我还没有设置管理员,并且我认为这样做的方式可能会出现问题,因为我正在创建自己的群组表。

我将如何阻止仅对属于管理员组的用户的特定路由的访问?

谢谢

laravel laravel-5 active-directory laravel-5.1
1个回答
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'
]);
© www.soinside.com 2019 - 2024. All rights reserved.