2014-09-21 3 views
1

3 개의 역할과 관리자 패널이 있습니다. 역할에 따라 내 패널의 링크 및 경로로 변경하고 싶지만 패키지를 사용하지 않습니다 ... 1 개의 공통점이 있습니다. 필터, 1 개의 관리 필터, 1 개의 중재자 필터 및 1 개의 다른 사용자 필터. 다른 사용자 필터를 사용하여 제어판의 모든 링크를 변경하고 싶습니다. 이 내 문제입니다 :Laravel 4 개의 다른 역할에 대한 필터 그룹 경로

Route::group(array('before' => 'common'), function(){ 

Route::controller('panel','admin_PanelController'); 
Route::controller('phone','phneController'); 
Route::controller('internet','internetController'); 
Route::controller('message','messageController'); // siteden gelen başvurular 

/* admin */ 
Route::group(array('before' => 'admin'), function() 
{ 
    Route::controller('useroptions','useroptionsController'); 

}); 

/* moderator */ 
Route::group(array('before' => 'mod'), function() 
{ 
    Route::controller('notifications','notificationsController'); 

}); 
}); 

/* different user */ 

Route::group(array('before' => 'diffuser'), function() 
{ 
    Route::controller('panel','admin_PanelController'); 

}); 

난 그냥 확산하기 위해 패널과 블록 확산에 다른 경로를 보여주고 싶은,하지만 서로 다른 사용자에 대해,이 부분 나던 작품의 이상이 최종 코드를 작성할 때!

도움을 기다리고 있습니다.

내 필터

Route::filter('common', function() 
{ 
    if (Auth::guest()) 
    { 
    return Redirect::guest('login'); 
    } 
}); 


Route::filter('admin', function() 
{ 
    if (Auth::guest() || Auth::user()->type !== "admin") 
    { 
    return Redirect::guest('login'); 
    } 
}); 



Route::filter('mod', function() 
{ 
    if (Auth::guest() || Auth::user()->type !== "mod") 
    { 
     return Redirect::guest('login'); 
    } 
}); 


Route::filter('diffuser', function() 
{ 
    if (Auth::guest() || Auth::user()->type !== "diffuser") 
    { 
     return Redirect::guest('login'); 
    } 
}); 

답변

3

는 그 경로보기를 금지 할 필요가 있기 때문에, 전화/인터넷/메시지에 적용해야하는 '디퓨저'를 확인 귀하의 필터. 이 시도 :

routes.php

Route::group(array('before' => 'common'), function() 
{ 
    Route::group(array('before' => 'set_links_diffuser'), function() 
     Route::controller('panel','admin_PanelController'); 
    }); 
    Route::group(array('before' => 'prohibit_diffuser'), function() 
    { 
     Route::controller('phone','phneController'); // check spelling of phne 
     Route::controller('internet','internetController'); 
     Route::controller('message','messageController'); 
    }); 
    Route::group(array('before' => 'allow_only_admin'), function() 
    { 
     Route::controller('useroptions','useroptionsController'); 
    }); 
    Route::group(array('before' => 'allow_only_mod'), function() 
    { 
     Route::controller('notifications','notificationsController'); 
    }); 
}); 

filters.php

Route::filter('common', function() 
{ 
    if (Auth::guest()){ 
     return Redirect::guest('login'); 
    } 
}); 

// no need to repeat Auth::guest() check for these filters, 
// since 'common' does that for all 

Route::filter('allow_only_admin', function() 
{ 
    if (Auth::user()->type !== "admin"){ 
     return Redirect::guest('login'); 
    } 
}); 

Route::filter('allow_only_mod', function() 
{ 
    if (Auth::user()->type !== "mod"){ 
     return Redirect::guest('login'); 
    } 
}); 

Route::filter('prohibit_diffuser', function() 
{ 
    if (Auth::user()->type == "diffuser"){ 
     return Redirect::guest('login'); 
    } 
}); 

Route::filter('set_links_diffuser', function() 
{ 
    if (Auth::user()->type == "diffuser"){ 
     // do stuff here to change the links on the control panel 
    } 
});