2016-06-13 4 views
0

약간 혼란 스럽습니다. 인증을 위해 LDAP를 사용하고 있습니다. 더 구체적으로는 https://github.com/SaschaDens/ldap-connectorLDAP를 사용한 경로 보호

내가 사용하는 LDAP 라이브러리는 본질적으로 Laravels Authentication Facade에서 작동합니다.

모든 것이 정상입니다. 이제 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, 
]; 

를 다음과 같습니다. 분명히 내가 관리자 아직 설정이없는, 내가 생각 내 자신의 그룹 테이블을 만들기 때문에 내가 거기에서 일하는 방식이 문제가 될 수 있습니다.

관리자 그룹과 다른 사용자에게만 특정 경로에 대한 액세스를 차단하려면 어떻게해야합니까?

감사

답변

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]' 
]);