• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
243 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 450 wizyt
pytanie zadane 9 lutego 2020 w Algorytmy przez michal Mądrala (5,560 p.)
0 głosów
1 odpowiedź 175 wizyt
pytanie zadane 31 stycznia 2018 w PHP przez mi-20 Stary wyjadacz (13,250 p.)
0 głosów
1 odpowiedź 207 wizyt

93,187 zapytań

142,201 odpowiedzi

322,012 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - rucin93
  6. 2006p. - Michal Drewniak
  7. 2005p. - Łukasz Siedlecki
  8. 1964p. - CC PL
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1586p. - Dawid128
  14. 1520p. - Marcin Putra
  15. 1480p. - ssynowiec
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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...