我对某些事情有些困惑。 对于身份验证,我使用的是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来确保用户已登录。显然,我还没有设置管理员,并且我认为这样做的方式可能会出现问题,因为我正在创建自己的群组表。
我将如何阻止仅对属于管理员组的用户的特定路由的访问?
谢谢
您可以通过创建新的路由中间件来实现。
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'
]);