2017-03-20 4 views
-1

id, admin_type, name 등과 같은 일부 열을 가진 관리자 테이블이 있습니다. 여기에 admin_type의 두 가지 유형이 있습니다. 하나는 "admin"이고 다른 하나는 "hod"입니다.laravel에서 특정 사용자의 URL을 비활성화하는 방법은 무엇입니까?

지금 문제는 모든 관리자 URL에 액세스 할 수 있도록 (admin_type == "admin")으로 로그인하는 관리자를 원하지만, admin_type == "hod" 사용자가 액세스 할 수있는 URL을 제한하고 싶습니다.

저는 Laravel 5.2를 사용하고 있습니다. 누구든지이 문제를 해결하도록 도와 줄 수 있습니까?

enter image description here :

예를 들어, admin_type=="hod"있는 사용자가 액세스하는 경우이 링크

www.example.com/admin/add-user 
www.example.com/admin/edit-user 
www.example.com/admin/add-customer 
www.example.com/admin/edit-customer 

그리고 더 많은 URL을, 나는 여기에

**You have no rights to access this link ** 같은 몇 가지 메시지를 표시하기 위해 내 데이터베이스 구조되고 싶어

+0

당신은 무엇을 시도? [내장 된 인증 서비스] (https://laravel.com/docs/5.2/authorization)의 문제점은 무엇입니까? –

+0

또한 게시물의 형식을 올바르게 지정하는 방법에 대해서는 [markdown 도움말] (http://stackoverflow.com/editing-help)을 읽어보십시오. –

+0

@EdCottrell 당신이 보내는 링크는 laravel이 제공하는 인증 된 componenet을 기반으로하지만 코어 코드로 로그인을 완료했습니다 – kunal

답변

1

이러한 사용 사례에 대해 Middleware을 구현했습니다. Laravel 작업 디렉토리에 php artisan make:midldeware yourNameHere을 실행하면 장인이 해당 미들웨어 클래스를 생성합니다.

그러면 다음과 같은 코드가 필요합니다. 사용자가 관리자가 아닌 경우를 대비해 403 번의 중단 조건이있는 간단한 if 조건입니다.

class AdminMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if ($request->user()->admin_type != 'admin') { 
      return abort(403, "No access here, sorry!"); 
     } 

     return $next($request); 
    } 
} 

귀하의 경로 파일 (경로/web.php는) :

... 
Route::group(["middleware" => 'admin'], function() { 
     //Your admin routes should be declared here 
}); 
... 
+1

당신은 한 가지를 놓쳤습니다. 별칭으로 kernel.php의 관리자를 정의하지 않았습니다. – kunal