2017-09-14 6 views
-1

J'écris une solution basée sur le serveur. Dans la base de données, il y a beaucoup d'utilisateurs avec des permissions différentes et je dois vérifier s'ils ont la permission d'accéder au module qu'ils essayent de faire.Laravel: Vérification si l'utilisateur a l'autorisation

Dans chaque contrôleur j'ai inclus quelque chose comme:

protected $module = "moduleName"; 

J'ai essayé de le résoudre aime:

function __construct() 
{ 
    $perm = session()->get('perm'); 
    if (!isset($perm[$this->module]) || !$perm[$this->module]) { 
     Session::flash('message_error', "<span class='glyphicon glyphicon-warning-sign'></span> Access denined!"); 
     return back(); 
    } 
} 

Il affiche le message mais il affiche toujours la page ne réoriente en arrière. Comme vous le voyez, je lis les autorisations de session et le nom des modules est sauvegardé dans le contrôleur, donc je ne pense pas que cela puisse être résolu par un middleware sauf si je fais des middleware pour chaque module (je parle de 30 modules).

Merci d'avoir pris le temps de lire ce

+0

Donc le problème est la redirection? –

+3

'return redirect() -> back()'? – milo526

+0

retour retour() fonctionne de la même manière, je demande une approche différente – NoOorZ24

Répondre

-1

L'intergiciel a résolu cela. Itinéraire:

Route::group(['middleware' => 'module:moduleName'], function() { 
    // Routes... 
}); 

middleware personnalisé:

public function handle($request, Closure $next, $module) 
{ 
    $perm = session()->get('perm'); 
    if (!isset($perm[$module]) || !$perm[$module]) { 
     Session::flash('message_error', "<span class='glyphicon glyphicon-warning-sign'></span> Access denined!"); 
     return redirect()->back(); 
    } 

    return $next($request); 
} 

Je vais aussi mentionner que les groupes Route peuvent être imbriquées. Donc, vous pouvez envelopper plusieurs groupes avec quelque chose comme middleware auth ainsi

0

Il y a une solution très facile à votre code, vous avez oublié la définir la redirect, donc au lieu d'utiliser

return back(); 

utilisation

return redirect()->back(); 

Cela fera la redirection.

Il y a aussi une erreur dans votre raisonnement, vous pourriez et devriez probablement utiliser le middleware.

Le middleware a accès à l'utilisateur, à la session et peut recevoir des paramètres. Ce sont les exigences nécessaires pour votre système.

Vous pouvez également assign middleware on a controller basis.

+0

Je l'ai résolu avec middleware. Retourne aussi() == return redirect-> back() – NoOorZ24