Laravel role użytkowników.

0

Mam taki problem nie za bardzo kumam jak ustawić role użytkowników w laravelu próbowałem czegoś takiego, ale nic się nie wyświetla.

          Gate::define('update-post', function ($user, $post) {
          print "dobrze";
        return $user->id == $post->user_id;
    });

korzystałem z tego poradnika https://laravel.com/docs/5.6/authorization

0

Już to powoli rozgryzam tylko nie wiem co się znajduje w zmiennej $post

if (Gate::forUser($user)->denies('update-post', $post)) {
    // The user can't update the post...
}

Bo w zmiennej $user jest użytkownik.

0

W tej zmiennej trzymany jest model, do którego chcesz sprawdzić dostępy - jest on przekazywany później do funkcji, którą rejestrujesz za pomocą Gate::define.

Wykorzystuje się to wtedy, gdybyś np. chciał sprawdzić czy dany użytkownik powinien mieć możliwość zaktualizowana danego, konkretnego postu.

0

Dobrze, a teraz gdzie się przydziela danemu użytkownikowi jakąś role ?

1

W Laravelu nie ma systemu uprawnień/roli out of the box. To, czego używasz służy do kontroli dostępu (co w sumie wiąże się z rolami i uprawnieniami, ale to trochę coś innego).

Ja jak robie coś w Laravelu, to używam tej paczki: Roles And Permissions For Laravel 5.

Działanie jest bardzo proste. Migracje dodają Ci dwie główne tabelki:

  • roles
  • permissions

Model jest taki:

  • rola może mieć uprawnienia
  • użytkownik może mieć role (albo kilka) i dzięki temu ma uprawnienia, które są przypisane do jego ról

Bardziej zaawansowane rzeczy:

  • użytkownik może mieć uprawnienia poza rolami
  • uprawnienia się dziedziczą, jeżeli masz rolę z wyższym poziomem

Jak potrzebuje jakiś bardziej skomplikowanych warunków, których nie da się zapakować do bazy, to wtedy tworzę polityki i w nich sprawdzam, czy użytkownik ma np. daną rolę i czy jest parzysty dzień tygodnia w roku przestępnym itp.

0

A nie można po prostu zrobić tego tak, że w laravelu zrobić tak jak w zwykłym phppie czyli mieć przy użytkowniku w bazie danych dodatkowe pole uprawnienia ?

0

Można - kto Ci broni?
Przecież Laravel to właśnie PHP, nie żaden odrębny język.

1

Można. Dokładnie to Ci wyżej zaproponowałem, tylko w bardziej rozbudowanej wersji. Możesz sobie równie dobrze dodać kolumnę roles do tabelki users i trzymać tam wartości po przecinku :P

Wyżej po prostu masz swojego rodzaju szwajcarski scyzoryk jeżeli chodzi o role i uprawnienia. Zazwyczaj w aplikacjach nie wystarczy rozgraniczenie admin/user, bo szybko dochodzą nowe rzeczy i się robi problem.*

* Dlatego też nigdy nie powinieneś sprawdzać po roli, tylko po uprawnieniu, bo reguły jaka rola ma jakie uprawnienia mogą się zmienić i wtedy jesteś w czarnej... Dla przykładu masz w całym kodzie ify w stylu: if has role admin ... to pozwól na pokazanie jakiegoś guzika. I nagle dochodzi Ci nowa rola - moderator. Moderator też może widzieć ten guzik. I co teraz? Wszędzie dodajesz if has role admin or has role moderator? Słabo. Dlatego lepiej miec uprawnienia: if has permission see some button, bo wtedy tylko dodajesz nową rolę moderator i podpinasz mu to uprawnienie i już działa. OCP. Role to takie agregaty dla uprawnień, dlatego też lepiej myśleć o tym w kategoriach grup uprawnień niż w kategoriach ról, ale role się jakoś tak lepiej czyta.**

** Ale trzeba też pamiętać o YAGNI i KISS. Jeżeli masz uber prostą apkę, która składa się z dwóch widoków, gdzie masz 0 lub 1 i albo ktoś coś może, albo nie to faktycznie Twoje podejście może mieć więcej sensu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1