2016-06-13 2 views
0

Я немного смущен чем-то. Для аутентификации я использую LDAP, более конкретно это https://github.com/SaschaDens/ldap-connectorЗащита маршрутов с помощью LDAP

Эта библиотека LDAP, которую я использую, по существу работает поверх фасада аутентификации Laravels.

Все в порядке, я могу войти и выйти с помощью LDAP. Однако при входе в систему у меня есть кнопки для пользователей обновлений. Это, по сути, использует LDAP для получения всех групп, которые пользователь разделяет. Поэтому у меня есть три таблицы:

users 
groups 
users_groups 

Когда кнопка нажата, я добавляю всех пользователей в таблицу пользователей. Затем я добавляю все уникальные группы в таблицу групп. Последняя таблица users_groups представляет собой сводную таблицу, которая связывает user_id с group_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, чтобы убедиться, что пользователь вошел в систему. Очевидно, что я не админ один установить еще, и я думаю, то, как я это делаю, может возникнуть проблема, потому что я создаю свою таблицу групп.

Как я могу заблокировать доступ к определенному маршруту только тем пользователям, которые находятся за пределами группы администратора?

Thanks

ответ

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' => '[email protected]' 
]); 
Смежные вопросы