2014-09-10 2 views
0

je dois ajouter Niveau accès à mon site et je code habituellement ma route comme:Laravel 4 Route d'accès au niveau

Route::get('/', array(
    'as' => 'home-view', 
    'uses' => '[email protected]' 
)); 

/* Authenticated Group */ 
Route::group(array('before' => 'auth'), function(){ 
    Route::get('/', array(
     'as' => 'admin-view', 
     'uses' => '[email protected]' 
    )); 
} 
/* Unauthenticated Group */ 
Route::group(array('before' => 'guest'), function(){ 
    Route::get('/signin', array(
     'as' => 'user-signin-get', 
     'uses' => '[email protected]' 
    )); 
} 

i besoin d'ajouter un accès au niveau « Utilisateur » ou « admin ». comment je peux faire cette route de filtrage? aussi simple que possiple ou que recommandez-vous?

+0

Je vous suggère de lire sur les filtres de route dans la documentation Laravel: http://laravel.com/docs/routing#route-filters –

Répondre

1

Vous pouvez avoir autant de filtres sur un itinéraire que vous le souhaitez. Considérez ceci:

Route::group(array('before' => 'auth|hasAdminLevel'), function(){ 
    Route::get('/', array(
     'as' => 'admin-view', 
     'uses' => '[email protected]' 
    )); 
}); 

Cela s'appliquera à la fois la auth ainsi que le filtre hasAdminLevel à votre itinéraire admin-view. L'itinéraire hasAdminLevel est un custom filter que vous devrez définir.

Mise à jour

hasAdminLevel est un filtre personnalisé, et peut être défini comme ceci:

Route::filter('hasAdminLevel', function() { 
    if(Auth::user()->level != 'admin') { 
     return Redirect::to('/'); 
    } 
}); 

Où vous placez c'est un peu à vous, mais un bon endroit serait dans le porte bien son nom app/filters.php.

0

Je suppose que u ont un utilisateurs (id, nom d'utilisateur, etc.), rôles (id, nom, etc), et user_role tables (user_id, role_id, etc.) et les relations correctement configuré dans vos modèles.

Vous pouvez donc créer une nouvelle fonction dans votre modèle utilisateur pour vérifier si un utilisateur a un rôle.

public function hasRole($name) { 
    foreach ($this->roles as $role) { 
     if ($role->name == $name) return true; 
    } 
    return false; 
} 

Ensuite, vous pouvez créer un filtre pour que:

Route::filter('role', function($route, $request, $role){ 
if(Auth::guest() or !Auth::user()->hasRole($role)) { 
    return Redirect::guest('/'); // whatever you want 
} 

});

Et enfin il suffit d'appliquer le filtre à vos routes:

Route::group(['prefix' => 'admin', 'before' => 'role:the_role_name_you_want'], function(){ 
    // Your Routes here 
});