YesMan2
YesMan2

Reputation: 15

Laravel 4 filter group routes for different roles

i have 3 roles and an admin panel , i want to change with links (and routes) on my panel according to roles , but i dont use any packages ... I have 1 common filter , 1 admin filter , 1 moderator filter and 1 different user filter. With different user filter i want to change all links in control panel . This is my problem :

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

});

i just want to show panel to diffuser and block other routes to diffuser, but when write these final codes for different user , above of these part doesnt work !

Please help me , waiting for help!

my filters

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

Upvotes: 1

Views: 1635

Answers (1)

damiani
damiani

Reputation: 7371

Your filter that checks for 'diffuser' needs to apply to phone/internet/message, since it needs to prohibit viewing of those routes. Try this:

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
    }
});

Upvotes: 3

Related Questions