我有些困惑。对于身份验证,我使用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来确保用户已登录。显然我还没有设置管理员,我认为我这样做的方式可能会有问题,因为我正在创建我自己的小组表。
我如何才能阻止对特定路由的访问权限仅限于管理员组的用户?
由于
答案 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'
]);