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

Warunek if w php (symfony)

Object Storage Arubacloud
0 głosów
292 wizyt
pytanie zadane 27 lipca 2017 w PHP przez Adam Ostrogórski Obywatel (1,070 p.)
edycja 27 lipca 2017 przez HaKIM

Witam, chcę stworzyć warunek w funkcji, ale niestety nie wykonuje swojego zadania. Dlatego zwracam się do bardziej doświadczonych - czy wiecie, gdzie robię błąd w poniższej funkcji?
 

public function getRoles() {
        $connect = mysqli_connect("127.0.0.1", "root", "", "bazaB");
        $query = ("SELECT * FROM uzytkownicy");
        $checkAccess = $connect->query($query);

        if(($this->email === $checkAccess->email ) and  ($checkAccess->access_subscribe === 1)){
          return array('ROLE_SUBSKRYBENT');  
        } 
        
        else if(empty($this->roles)){
            return array('ROLE_UZYTKOWNIK');
        }
        
        return $this->roles;
    }


Ten prosty serwis z logowaniem tworzę na Symfony 2.8. I próbuję zrobić tak, że:

- mam serwis z logowaniem,

- użytkownik rejestruje się - z automatu dostaje rolę zwykłego usera

- jeśli użytkownik o takim emailu (porównuję z bazy A (serwisu) z emailem z bazy B) spełnił warunek (np. subskrypcja), to loguje się z rolą subskrybenta (warunek sprawdzam w zewnętrznej bazie B).

- jeśli nie spełnił warunku to loguje się tylko jako user.

Czy ktoś wie, gdzie popełniłem błąd?

Z góry dziękuję za pomoc.

1 odpowiedź

–1 głos
odpowiedź 27 lipca 2017 przez Boshi VIP (100,240 p.)
Ty się dobrze czujesz na pewno?  W symfony, w serwisie wstawiasz łączenie z bazą danych? używasz czystego sql, mając doctrine albo chociaż query buildera? a do tego zwracasz albo roles(podejrzewam kolekcja) albo jakąś z tyłka wyjętą tablicę, więc po co ci roles?

Porzuć symfony i napisz ten kod w czystym OOP, bo nie wiem jak można przy nawet narzuconym standardzie tak spier... kod.
komentarz 27 lipca 2017 przez HaKIM Szeryf (87,590 p.)

używasz czystego sql, mając doctrine albo chociaż query buildera? a

 Tak w sumie to mając doctrine można robić query w czystym SQL, chociażby dla wydajności.

komentarz 27 lipca 2017 przez Boshi VIP (100,240 p.)
Ta, przy tak małej zapewne aplikacji wydajność tu ma pierwszoplanowe znaczenie...

bo jakoś nie wierzę, że ktoś pisząc taki gówno kod pracuje nad ogromnym projektem gdzie zaangażowanych jest kilkunastu albo kilkudziesięciu programistów.
komentarz 27 lipca 2017 przez CzikaCarry Szeryf (75,340 p.)
Lub z przyzwyczajenia, na początku zabawy z symfony też tak robiłem, dopiero potem wkręciłem się w doctrine :)
komentarz 27 lipca 2017 przez HaKIM Szeryf (87,590 p.)

Well, to tylko taka wzmianka, że można śmiało korzystać z czystego SQL.

Nie zapominajmy, że nasze odpowiedzi nie czyta wyłącznie pytający. Ktoś mógłby się przerazić, że robił zapytania w czystym SQL co nie musi być akurat takie złe...

Czy w Twoim przypadku używanie Query Buildera albo Doctrine nie byłoby lepszym rozwiązaniem zamiast czystego SQL?

 IMO byłoby lepiej. :)

komentarz 27 lipca 2017 przez Boshi VIP (100,240 p.)
Ludzie, ale on pisze w Symfony, a nie w czystym phapie gdzie sobie może klepać sqle dowoli. Inna sprawa ,to widział ktoś korzystanie z mysqli w Symfony? ba widział ktoś otwieranie włąsnego połączenia?  po to jest zitegrowany doctrine by z niego korzystać. Tak apropo

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html

Jak już na prawdę ktoś musi ...

 

no ale tak to jest jak ktoś się bierze za frameworki a nie ma pojęcia o programowaniu obiektowym, bo to co ten kod przedstawia to typowe podejście strukturalne.
komentarz 27 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
Pomyśl o FOSUserBundle i Role hierarchy
komentarz 27 lipca 2017 przez Adam Ostrogórski Obywatel (1,070 p.)
Rozumiem, że poziom mojego kodu może razić profesjonalnego programistę, ale staram się, próbuję, chcę się nauczyć i wiem, że jeszcze bardzo, bardzo dużo przede mną, bo mieszam tak wiele rzeczy.

Jeśli to możliwe, to czy ktoś mógłby podejść do tego dydaktycznie. W sensie nie krytykować i stwierdzać, że jest źle, tylko pomóc, wyjaśnić, wskazać.

Szanuję wasz czas i rozumiem, że nie każdy ma ochotę i potencjał do tego, aby być takim nauczycielem jak pan Mirosław, ale jeśli ktoś jednak chciałby, to byłbym bardzo wdzięczny za każdą pomoc. I to nie tylko mówię w moim imieniu, tylko wszystkich początkujących. Nie zrażajcie, tylko tłumaczcie (jeśli macie ochotę oczywiście), a wszyscy w końcu będą profesjonalistami, nawet jeśli dzisiaj są na bardzo niskim levelu.
komentarz 27 lipca 2017 przez Adam Ostrogórski Obywatel (1,070 p.)
Czyli w encji można napisać warunek w czystym sql? I zrobić to (nieładne, wiem) połączenie z zewnętrzną bazą?
komentarz 27 lipca 2017 przez Adam Ostrogórski Obywatel (1,070 p.)
Mam właśnie FOSUserBundle i Role hierarchy.
komentarz 27 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
Tutaj masz mały kurs i dokumentacje symfony po polsku. https://symfony2-docs-pl.readthedocs.io/pl/latest/

Dodatkowo tu masz bardzo fajny kanał https://www.youtube.com/channel/UCjeQU2wtPiQjwBNs4W6KwKA
komentarz 27 lipca 2017 przez Adam Ostrogórski Obywatel (1,070 p.)
Dziękuję.
komentarz 27 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
Encja to jedynie struktura z geteram, seterami, walidacja i polami z adnotacjami do odpowiednich tabel i relacji
komentarz 27 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)

Jeżeli ktoś "zasubskrypuje", to dodaj temu użytkownikowi odpowiednią role na określony czas. 

Jeśli rola jest dodana, to w kontrolerze wystarczy to sprawdzić w ten sposób

if ($this->get('security.authorization_checker')->isGranted('TWOJA_ROLA')) 
{
  //code
}

 

a w twigu 


{% if is_granted('TWOJA_ROLA') %} {% endif %}

 

komentarz 27 lipca 2017 przez Adam Ostrogórski Obywatel (1,070 p.)
Tak, dzięki, w ten sposób też można, to jakby już mam, tylko zabezpieczyłem dostęp poprzez access_control, globalnie dla całej ścieżki.

Tylko właśnie nie wiem, jak zrobić ten warunek w funkcji, że podczas logowania jest przyznawana rola usera bądź subskrybenta w zależności od tego, czy został spełniony warunek.
komentarz 27 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
Jeżeli używasz FOSUserBundle, to w bazie jest pole o nazwie roles. Przechowywane są tam właśnie role użytkownika. Przy logowaniu, napisany przeze mnie warunek powyżej sprawdza czy użytkownik posiada tą role o którą nam chodzi w bazie danych.
komentarz 27 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
Przyznawanie roli nie rób przy logowaniu, tylko gdy użytkownik spełni podany warunek (aby zostać subskrybentem).
komentarz 27 lipca 2017 przez Adam Ostrogórski Obywatel (1,070 p.)
Tak, tak, tylko poprzez ten warunek chcę stworzyć automatyczne dodawanie roli dla logującego się użytkownika, w zależności czy spełnił ten warunek czy nie. Czyli gdy się rejestruje, to ma z automatu zwykłą rolę usera. A gdy spełnia warunek, to może logować się z rolą subskrybenta.
komentarz 27 lipca 2017 przez Adam Ostrogórski Obywatel (1,070 p.)
Czyli w którym momencie?
komentarz 27 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
a jaki jest warunek uzyskania statusu subskrybenta ?
komentarz 27 lipca 2017 przez Adam Ostrogórski Obywatel (1,070 p.)

W drugiej bazie "bazaB" (zewnętrznej) mam tabelę z mailem i parametrem access_subscribe typu boolean. 

W bazie serwisu symfony ("bazaA") mam moich userów i ich maile. 

I teraz warunek próbuję zrobić taki:

- jeśli dla usera o danym mailu (mail z bazyA === mail z bazyB) wartość access_subscribe jest true, wtedy wpuszczam do serwisu z ROLE_SUBSCRIBER. Jeśli wartość false, to wpuszczam z ROLE_USER.

Tak słownie myślę. I teraz nie wiem, jak to przełożyć na kod w symfony. Próbowałem tak:

public function getRoles() {
        $connect = mysqli_connect("127.0.0.1", "root", "", "bazaB");
        $query = ("SELECT * FROM uzytkownicy");
        $checkAccess = $connect->query($query);
 
        if(($this->email === $checkAccess->email ) and  ($checkAccess->access_subscribe === 1)){
          return array('ROLE_SUBSKRYBENT');  
        } 
         
        else if(empty($this->roles)){
            return array('ROLE_UZYTKOWNIK');
        }
         
        return $this->roles;
    }

(wiem, że jest źle)

 

komentarz 27 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
Czemu rozdzielasz na 2 bazy ? NIe dałoby się tego w jednej zrobić ? Czemu ta druga baza ma służyć ?
komentarz 27 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
Jeżeli już rzeczywiście tak musisz, tu masz link o tym jak podłaczyć drugą baze w symfony

https://symfony.com/doc/3.1/doctrine/multiple_entity_managers.html
komentarz 27 lipca 2017 przez Adam Ostrogórski Obywatel (1,070 p.)
Próbuję zrobić schemat działania, żeby móc to łączyć z np. woocommerce. W sensie kupno subskrypcji odbywa się poprzez sklep na woocommerce. Czy dałoby się to zrobić inaczej?
komentarz 27 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
Nie wiem, nie robiłem takich rzeczy ;)
komentarz 27 lipca 2017 przez Adam Ostrogórski Obywatel (1,070 p.)
Ok, dzięki za pomoc :)

Podobne pytania

0 głosów
1 odpowiedź 422 wizyt
pytanie zadane 30 listopada 2017 w PHP przez Adam Ostrogórski Obywatel (1,070 p.)
0 głosów
4 odpowiedzi 276 wizyt
pytanie zadane 21 kwietnia 2018 w PHP przez wneku Nowicjusz (200 p.)
0 głosów
0 odpowiedzi 138 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!

...