• 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

Object Storage Arubacloud
0 głosów
175 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 386 wizyt
pytanie zadane 9 lutego 2020 w Algorytmy przez michal Mądrala (5,560 p.)
0 głosów
1 odpowiedź 151 wizyt
pytanie zadane 31 stycznia 2018 w PHP przez mi-20 Stary wyjadacz (13,190 p.)
0 głosów
1 odpowiedź 145 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...