Laravel: różnica między Route Middleware a polisa

Rozwijam aplikację z laravel, zdałem sobie sprawę, że to, co można zrobić z Policy, można zrobić dokładnie z Middleware. Powiedzmy, że chcę uniemożliwić użytkownikowi aktualizację trasy, jeśli nie jest on właścicielem informacji, mogę łatwo sprawdzić trasę i zrobić to samo z polisy.

Więc moje pytanie brzmi dlaczego powinienem używać policy nad middleware i vice versa

Author: James Okpe George, 2016-01-26

2 answers

Obecnie przechodzę przez mały refaktor z moimi rolami, uprawnieniami i trasami i zadałem sobie to samo pytanie.

Na poziomie powierzchni wydaje się, że prawdziwe oprogramowanie pośredniczące i zasady realizują tę samą ogólną ideę. Sprawdź, czy użytkownik może robić to, co robi.

Dla odniesienia tutaj jest Laravel docs...

Middleware "Mogę to zobaczyć? Mogę iść?"

Http middleware zapewnia wygodny mechanizm filtrowania HTTP wnioski wpisując swoją aplikację. Na przykład Laravel zawiera oprogramowanie pośredniczące weryfikujące użytkownika aplikacji to uwierzytelnione. Jeśli użytkownik nie zostanie uwierzytelniony, oprogramowanie pośredniczące będzie przekierowanie użytkownika na ekran logowania. Jeśli jednak użytkownik jest uwierzytelnione, oprogramowanie pośredniczące pozwoli na kontynuację żądania dalej do wniosku.

Oczywiście można napisać dodatkowe oprogramowanie pośredniczące, aby wykonać różne zadań oprócz uwierzytelniania. CORS middleware może być odpowiedzialny za dodawanie odpowiednich nagłówków do wszystkich odpowiedzi Twoje podanie. Oprogramowanie pośredniczące do logowania może rejestrować wszystkie przychodzące żądania do podania.

Https://laravel.com/docs/master/middleware#introduction

W mojej lekturze Middleware polega na działaniu na poziomie żądania. W kategoriach " czy ten użytkownik może zobaczyć stronę?", lub " czy ten użytkownik może tu coś zrobić?"

Jeśli tak, to przechodzi do metody kontrolera powiązanej z tym strona. Co ciekawe, Middleware może powiedzieć: "Tak, możesz tam iść, ale zapiszę, że idziesz."Itd.

Kiedy to się skończy. Nie ma większej kontroli ani wpływu na to, co robi użytkownik. Innym sposobem myślę o tym jako o pośredniku.

Polityka "Mogę to zrobić? Mogę to zmienić?"

Oprócz świadczenia usług uwierzytelniania po wyjęciu z pudełka, Laravel zapewnia również prosty sposób organizacji logiki autoryzacji i Kontrola dostępu do zasoby. Istnieje wiele metod i pomocników, którzy pomogą Ci w organizacji logiki autoryzacji oraz omówimy każdy z nich w tym dokumencie.

Https://laravel.com/docs/master/authorization#introduction

Polityka wydaje się jednak bardziej skupiać się na robieniu . Czy użytkownik może zaktualizować dowolny wpis, czy tylko jego?

Te pytania wydają się pasować do metody kontrolera, gdzie wszystkie wywołania do akcji na zasobie są zorganizowane. Pobierz ten obiekt, Zapisz lub zaktualizuj artykuł.

Jak wspomniał tjbb, oprogramowanie pośredniczące może sprawić, że trasy będą bardzo brudne i trudne do zarządzania. To jest przykład z mojego pliku routes:

Problem

    Route::group(['middleware' =>'role:person_type,person_type2',], function () {
        Route::get('download-thing/{thing}', [
             'as' => 'download-thing', 
             'uses' => 'ThingController@download'
        ]);
    }); 

To jest bardzo trudne do odczytania w moim pliku trasy!

Inne podejście do polityki

//ThingController
public function download(Thing $thing)
{
    //Policy method and controller method match, no need to name it
    $this->authorize($thing);

    //download logic here....
}
 33
Author: GeraldBiggs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:29

Route middleware pozwala na zastosowanie obsługi żądań do dużej liczby tras, zamiast powtarzania kodu w każdej akcji kontrolera - dobrym przykładem jest sprawdzanie uwierzytelniania i przekierowywanie gości. Kontrolery zamiast tego zawierają logikę unikalną dla określonych tras/akcji - możesz użyć do tego oprogramowania pośredniczącego, ale potrzebujesz osobnego oprogramowania pośredniczącego dla logiki każdej trasy i wszystko byłoby bardzo niechlujne.

Zasady / umiejętności to po prostu sposób sprawdzania uprawnień użytkowników-możesz odpytywaj je za pomocą kontrolera, oprogramowania pośredniczącego lub gdziekolwiek indziej. Zwracają tylko true lub false, więc nie są równoważne kontrolerom ani oprogramowaniu pośredniczącemu. W większości przypadków umiejętności będą porównywać użytkownika z innym modelem, który zostanie załadowany na podstawie identyfikatora wysłanego do akcji kontrolera, ale prawdopodobnie są też aplikacje do użytku z oprogramowaniem pośredniczącym.

 13
Author: tjbp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-27 03:20:03