我有点被什么东西弄糊涂了。对于身份验证,我使用的是LDAP,更具体地说是这个https://github.com/SaschaDens/ldap-connector
我使用的LDAP库实际上是在Laravel身份验证外观之上工作的。
一切都很好,我现在可以使用LDAP登录或退出。但是,当我登录时,我有一个更新用户按钮。这实际上是使用LDAP来获取用户所分离的所有组。所以我有三张桌子
users
groups
users_groups
当按下按钮时,我会将所有用户添加到users表中。然后,我将所有唯一的组添加到组表中。最后一个表users_groups本质上是一个枢轴表,它将users_id链接到groups_id。
最后,我可以看到,例如,我是三个组的一部分,其中之一是管理组。通过这样做,我也可以看到这个小组的所有成员。
$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来确保用户已登录。显然,我还没有设置一个管理员,而且我认为我这样做的方式可能会出现问题,因为我正在创建自己的组表。
如何阻止只访问管理组成员的用户访问特定的路由?
谢谢
发布于 2016-06-13 14:32:45
您可以通过创建一个新的路由中间件来做到这一点。
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'
]);
https://stackoverflow.com/questions/37788098
复制相似问题