Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Laravel] Pobieranie rekordów zależne od roli
john_doe
post
Post #1





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


Hej

Każdy user jest przypisany do firmy.
User jest też przypisany do roli ( może mieć wiele ról ).
Chciałbym osiągnąć funkcjonalność gdzie:

NP 1 ) Admin widzi wszystko: dokumenty, wszystkie combosy wypełnione wszystkim, etc

NP 2 ) User widzi: dokumenty z jego firmy. Jeszcze nie wiem czy nagłówki dokumentów będę wiązał z userem czy z firmą. Ale dla tych dywagacji nie ma to większego znaczenia.
Będę też miał pozycje dokumentu. Trzeba coś wymyślić aby metoda showDocumentElements(int DocumentId) nie pozwalała zobaczyć pozycji z nieswojego dokumentu
Etc.
Proszę Was o podpowiedz, kawałek kodu, coś co zobrazuje jak to powinno być napisane.

Temat myśle bardzo uniwersalny i każdy z niego zaczerpie.

Nie chciałbym tworzyć osobnych kontrolerów dla ról.
Zastanawiam się czy nie wystawić serwisu jakiegoś, którego metody dostawałyby role usera i na ten podstawie pobierały z repozytorium odpowienie dane? ( na ifach )
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
john_doe
post
Post #2





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

Ostrzeżenie: (0%)
-----


R4xz dzieki. Myslalem, że czegoś nie rozumiem i Laravel ma coś out of the box więc wolałem spytać Was.

Napewno jednym z podejść jest query scopes
  1. public function scopeBelongingToUser($query)
  2. {
  3. return $query->where('user_id', auth()->user()->id);
  4. }
  5. public function scopeBelongingToAdmin($query)
  6. {
  7. if (auth()->user()->roles->contains('admin') {
  8. return $query->select('*');
  9. }
  10.  
  11. abort(403, 'Unauthorized');
  12. }
  13. public function documents()
  14. {
  15. $this->hasMany(Document::class);
  16. }
  17.  
  18. // i potem
  19. Document::belongingToUser();
  20.  
  21. Document::belongingToAdmin();


Lub coś takiego

  1. public function documents()
  2. {
  3. if ($this->hasRole('admin')) {
  4. return Document::all();
  5. } else {
  6. return $this->hasMany(Document::class);
  7. }
  8. }


Ten post edytował john_doe 27.01.2018, 00:47:44
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 18:48