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

Symfony3, dostęp do treści tylko dla konkretnego użytkownika

0 głosów
394 wizyt
pytanie zadane 14 czerwca 2018 w PHP przez MiguelSantos Początkujący (270 p.)

Mam takie noobowe pytanie, 

dłubię sobie aplikację w symfony3 i mam problem z tym, że mam różnych użytkowników - wszyscy z ROLE_USER, ale chciałbym zrobić każdemu z nich własny mini panel administracyjny do którego dostęp będzie miał tylko konkretny  zalogowany użytkownik, taka prozaiczna rzecz ale zupełnie nie wiem jak się do tego zabrać. 

Zalogowany jest użytkownik o id=12 więc wchodząc na user/12/dashboard widzi informacje tylko jemu przeznaczone. 

Czy powinienem tutaj wykorzystać Voters ?

2 odpowiedzi

+2 głosów
odpowiedź 15 czerwca 2018 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
wybrane 20 października 2018 przez MiguelSantos
 
Najlepsza

Tak jak napisałeś, powinieneś użyć Voters.
Przed akcja w kontrolerze dodaj:
 

@Security("is_granted('dashboard', user)", message="Access denied")

Implementujesz metody abstrakcyjne po klasie Voters:

// Klasa dziedzicząca metody abstrakcyjne po Voters

private const DASHBOARD= 'dashboard'';

protected function supports($attribute, $subject): bool
{
        if (!in_array($attribute, [self::SHOW, self::DASHBOARD])) {
	    return false;
	}

	if (!$subject instanceof User) {
		return false;
	}

	return true;
}

protected function voteOnAttribute($attribute, $subject, TokenInterface $token): bool
{
   }
       switch ($attribute) {
           case self::EDIT:
                  return $this->dashboardForUser($subject, $token);
	}

	return false;
}

// Funcja pomocnicza, sprawdzająca czy dany user jest właścicielem zasobów
private dashboardForUser($subject, TokenInterface $token): bool
{
    $authenticatedUser = $token->getUser();
    
    if (!$authenticatedUser instanceof User) {
       return false;
    }
    
    /**
      * @var User $subject
     */
    return $authenticatedUser->getId() === $subject->getId();
}


 

0 głosów
odpowiedź 14 czerwca 2018 przez Igor Gawrys Stary wyjadacz (12,460 p.)
Wyświetlasz dane dotyczące danego użytkownika np. nazwe z id użytkownika.
komentarz 14 czerwca 2018 przez MiguelSantos Początkujący (270 p.)
Dzięki za odpowiedź!
Ale tak - rozumiem że pobieram repozytorium - szukam użytkownika po np. ID później to iteruje w szablonie wyciągając te informacje, które chcę wyświetlić.
Ale inny użytkownik (powiedzmy user o id - 123) wpisując ręcznie  user/12/dashboard i tak zobaczy te informacje (bo również będzie miał ROLE_USER) przygotowane tylko dla użytkownika o id=12, a ja nie chcę mu dawać takiej możliwości.
komentarz 14 czerwca 2018 przez MiguelSantos Początkujący (270 p.)
Domyślam się że powinienem zrobić coś w styl - jeśli zalogowany jest użytkownik o takim id to wówczas ma dostęp do tej strony, tylko coś mi to nie wychodzi
komentarz 14 czerwca 2018 przez Igor Gawrys Stary wyjadacz (12,460 p.)
Tak ale możesz sprawdzać przed wyświetleniem czy id user jest równa zalogowanego user id
komentarz 14 czerwca 2018 przez Igor Gawrys Stary wyjadacz (12,460 p.)

JUTRO MOGE WYSŁAĆ KOD JAK TO ZROBIĆ.angel

komentarz 14 czerwca 2018 przez MiguelSantos Początkujący (270 p.)
Nie no, nie taki jest cel, sam to muszę ogarnąć z ewentualnymi podpowiedziami ;D
komentarz 14 czerwca 2018 przez Igor Gawrys Stary wyjadacz (12,460 p.)
$user = $this->container->get('security.context')->getToken()->getUser();
//$id = id pobrane z adresu
if($user->getId()==$id){
//Funkcja render
}

 

komentarz 14 czerwca 2018 przez MiguelSantos Początkujący (270 p.)
edycja 15 czerwca 2018 przez MiguelSantos

Dzięki wielkie!

Mały edit - z 

$user = $this->container->get('security.context')->getToken()->getUser();

miałem problemy, dopiero z get('security.token_storage')  wszystko wygląda ok

komentarz 15 czerwca 2018 przez Igor Gawrys Stary wyjadacz (12,460 p.)
Tak

Podobne pytania

0 głosów
3 odpowiedzi 574 wizyt
pytanie zadane 9 lutego 2020 w Algorytmy przez michal Mądrala (5,560 p.)
0 głosów
1 odpowiedź 224 wizyt
pytanie zadane 31 stycznia 2018 w PHP przez mi-20 Stary wyjadacz (13,250 p.)
0 głosów
1 odpowiedź 329 wizyt

93,632 zapytań

142,558 odpowiedzi

323,058 komentarzy

63,141 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...