2015-03-05 15 views
7

Niedawno zacząłem używać Laravel 5 i mam problem z wdrożeniem systemu, który nie tylko autoryzuje użytkowników, ale także sprawdza uprawnienia.Jak dodać więcej niż jeden produkt do oprogramowania pośredniego na trasie w Laravel 5

We wszystkich przykładach, które wykopałem online, widzę dwa elementy stosowane jako oprogramowanie pośrednie. Na przykład:

Route::group(['middleware' => ['auth', 'permissions']], function() { 
    // protected routes here 
    Route::get('admin', '[email protected]'); 
}); 

Jednak nie mogę tego zrobić bez względu na to, co robię. Mogę zastosować tylko jedną pozycję jako middleware, takie jak: „Trasa [admin] nie definiuje pojęcia”

Route::group(['middleware' => 'auth'], function() { 
    // protected routes here 
    Route::get('admin', '[email protected]'); 
}); 

Gdybym zastosowanie dwóch, pojawia się błąd

Próbowałem wszystkiego, co przychodzi mi do głowy, a ja walę głową w mur. Jak mogę zastosować dwa lub więcej elementów oprogramowania pośredniego do jednej trasy?

+1

pierwszy kod jest prawo, co błędów nie można dostać? –

+0

Wygląda na to, że oprogramowanie pośrednie 'permissions' jest właściwym problemem. Czy widzimy ten kod? – lukasgeiter

+0

Sfrustrowany, usunąłem kod i zmieniłem go od nowa. Twoja uwaga na temat uprawnień pozwoliła mi znaleźć problem. W kodzie użyłem 'return redirect() -> route ('admin'); zamiast 'przekierowania ('admin'); –

Odpowiedz

1

mam odpowiedzi na moje własne pytanie, jak wiele osób nie komentarz, gdzie roztwór jest wymieniony.

Ten problem dotyczy oprogramowania pośredniczącego Uprawnienia, o czym wspomniano w komentarzu użytkownika lukasgeiter.

Jak widać w mojej odpowiedzi, odpowiedź została znaleziona w middleware Uprawnienia, gdzie używał:

return redirect()->route('admin'); 

zamiast:

redirect('admin'); 

Było rzeczywiście nic złego kodu w moim plik routes.php.

1

Może spróbujesz utworzyć jedno oprogramowanie pośrednie, robiąc więcej niż podczas weryfikacji?

W swojej Kernel.php może masz coś takiego:

protected $routeMiddleware = [ 
    'auth' => 'Your\Route\Authenticate', 
    'auth.permissions' => 'Your\Route\AuthenticateWithPermissions' 
    'permissions' => 'Your\Route\RedirectIfNoPermissions' 
] 
0

Wy cas korzystania z tego class.

W moim przypadku, tak jak ty trzeba ustawić uprawnienia typu rolę do grupy:

Route::group(['middleware' => ['auth', 'permissions'], 'permissions' =>['Admin','Other']], function(){ 
    //Your Routes 
} 
1

myślę, że masz błąd w nawiasach. Kod powinien wyglądać tak:

Route::group(['middleware' => ['auth', 'permissions'], function() { 
    // protected routes here 
    Route::get('admin', '[email protected]'); 
}]); 

sprawdzaj nawiasu zamykającego ...

1

Ten błąd Trasa [admin] nie zdefiniowana jest spowodowana nazwą trasy admin nie jest zdefiniowany.

Nazwa trasy i ścieżka trasy to dwie różne rzeczy.

A ty zadeklarował ścieżkę trasy jako admin,

Route::get('admin', '[email protected]'); 

Jednak

return redirect()->route('admin'); 

oznacza, że ​​przekierowanie przepływu do drogi o nazwie Administrator.

Aby rozwiązać ten błąd,

zdefiniować nazwę trasy administratora następująco w tablicy zdefiniowanej poniżej 'as' => 'route_name'.

Rozwiązanie:

Route::get('admin', [ 
    'as' => 'admin', 
    'uses' => '[email protected]' 
]); 

Patrz link: https://laravel.com/docs/master/routing#named-routes

Powiązane problemy