2014-09-21 45 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 
    } 
});