• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Laravel prosta autoryzacja admina

VPS Starter Arubacloud
0 głosów
364 wizyt
pytanie zadane 19 marca 2019 w PHP przez kordix Gaduła (3,910 p.)
zmienione kategorie 19 marca 2019 przez Arkadiusz Waluk

Chciałbym żeby metody w danym kontrolerze były dostępne tylko dla usera o danym id.

Wiem, są tutoriale z roles, trzeba zrobić model na role i pivot table na przypisanie ról do użytkownika, trzeba stworzyć request itd.

Na takie potrzeby (ma być tylko jeden admin) nie da się zrobić tego prościej? Mam wrażenie że wystarczyło gdzieś dodać Auth::user()->id == danynumer , myślałem też o middleware na tej zasadzie:

  public function handle($request, Closure $next)
    {
      if($request->id != "3"){
        return redirect('home');
        }

 return $next($request);
    }

Tylko da się w ogóle tu odnieść do id użytkownika? 

Nie rozumiem też w jaki sposób middleware może "dostać" daną zmienną, w dokumentacji jest taki przykład:

  public function handle($request, Closure $next)
    {
        if ($request->age <= 200) {
            return redirect('home');
        }

        return $next($request);
    }

Wszystko ładnie pięknie, ale z skąd ten age właściwie ma się wziąć?  Z formularza gdzie jest input o nazwie age? Dajmy na to że w bazie jest wiek usera - w jaki sposób się do niego odnieść?

1 odpowiedź

+2 głosów
odpowiedź 19 marca 2019 przez Arkadiusz Waluk Ekspert (287,550 p.)

Mam wrażenie że wystarczyło gdzieś dodać Auth::user()->id == danynumer

Masz rację, mogłoby tak być.

if($request->id != "3"){

Raczej tu chodzi o $request->user()->id, aby dostać się do aktualnie zalogowanego użytkownika. Też można użyć tu Auth, ale generalnie ograniczałbym gdzie się da te fasady i statyczne metody. No i id to cyfra, więc tak dla ścisłości dałbym !== 3.

Wszystko ładnie pięknie, ale z skąd ten age właściwie ma się wziąć?  Z formularza gdzie jest input o nazwie age?

Tak, chodzi tu o pole przesłane np. formularzem. Osobiście preferuję użycie chociażby metody input ($request->input('age')), aby nie operować na samych magicznych właściwościach, ale też pewnie to zadziała.

Dajmy na to że w bazie jest wiek usera - w jaki sposób się do niego odnieść?

Obiekt requesta a dane w bazie to zupełnie co innego. Jak chcesz się dostać do bazy to możesz do tego użyć np. danego modelu.

komentarz 19 marca 2019 przez kordix Gaduła (3,910 p.)

Z tym age'm to czym się będzie różnił ten middleware od zwykłej walidacji formularza? Jak to się ma do dostępu do metody, właściwie route'a?

Ten kod w middleware, nie zwraca nic:

use Auth;

class getAdmin
{
  
    public function handle($request, Closure $next)
    {
      dd(auth()->user().$request->user().Auth::user());

    }
}


Mam użyć modelu User? Ok, ale jak się dostać do zalogowanego użytkownika?

Może szaleństwo ale zrobiłem to sobie tak:

public function customauth(){
   if (Auth::user()->id !=3 ){
     return redirect()->route('create');

   }
  }

    public function index(){
      return $this->customauth();
      return view('admin.index');
    }

Ta metoda jednak nie działa w konstruktorze

komentarz 19 marca 2019 przez Arkadiusz Waluk Ekspert (287,550 p.)

Z tym age'm to czym się będzie różnił ten middleware od zwykłej walidacji formularza?

Generalnie walidację robiłbym na dostępnych FormRequestach i nie używał do tego middleware, skoro są rzeczy dedykowane do tego.

Jak to się ma do dostępu do metody, właściwie route'a?

Co jak się ma? Do czego dokładnie dostępu?

Ten kod w middleware, nie zwraca nic:

dd() przerywa wykonywanie i wyświetla. Jeśli tak się nie dzieje to może nie masz zarejestrowanego middleware dla danego wpisu routingu i w ogóle się nie włącza.

Mam użyć modelu User? Ok, ale jak się dostać do zalogowanego użytkownika?

Użycie fasady Auth::user() może Ci dać aktualnie zalogowanego. Możesz też się do niego dostać poprzez globalną funkcję auth()->user(). Możesz wstrzyknąć AuthManager lub inną klasę tego typu i tam uzyskasz aktualnie zalogowanego. Możesz uzyskać go z requesta poprzez $request->user(). Sporo jest sposobów, osobiście staram się wystrzegać fasad i globalnych funkcji, które nagle z kosmosu dają użytkownika. Samym modelem User nie uzyskasz dostępu do aktualnie zalogowanego, to powyższe sposoby zwracają konkretny model User.

public function index(){
      return $this->customauth();
      return view('admin.index');
    }

Szaleństwo o tyle, że do drugiego return nigdy nie dojdzie :) return przecież zwraca wartość i przerywa od razu wykonywanie danej metody.

Podobne pytania

0 głosów
0 odpowiedzi 117 wizyt
pytanie zadane 28 września 2016 w PHP przez xandros Nałogowiec (29,450 p.)
0 głosów
1 odpowiedź 243 wizyt
pytanie zadane 15 grudnia 2022 w Python przez dedek2 Początkujący (370 p.)
+1 głos
1 odpowiedź 221 wizyt
pytanie zadane 5 lutego 2022 w JavaScript przez Dobdo Użytkownik (570 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...