Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL][inne] Budowa portalu
Forum PHP.pl > Forum > Przedszkole
Mefiuu
Witam wszystkich bardzo serdecznie. Dość długo nie zaglądałem na forum, ale teraz zwracam się do Was z paroma pytaniami smile.gif
Planuję zbudować dość duży portal na swoje potrzeby i chciałbym zapytać, szczególnie doświadczonych programistów, jak rozwiązać pewne kwestie. Całość chcę zbudować jak najbardziej obiektowo i modularnie.
Załóżmy sytuację, że w portalu będę miał oczywiście stronę dla użytkowników oraz administrację. Na stronie głównej będą rzeczy typu 'galeria', 'nowości', 'ankieta' i inne tego typu rzeczy jak na różnych portalach. Chciałbym napisać sobie poszczególne klasy dla wszystkich modulików. Jednak jak wiadomo, np. 'ankieta' ma możliwość głosowania dla zalogowanych użytkowników ale również musi być możliwość zmiany ankiety, dodania nowej i innych rzeczy z poziomu panelu administracyjnego. Moje pytanie jest następujące:

1) czy tworząc klasę "Ankieta" powinienem w niej zawrzeć tylko metody dostępne dla strony głównej, czy również te widoczne tylko z panelu admina ? Tzn. bardziej wizualnie, czy ma ona posiadać metody : vote oraz create_new_pool ? Czy może stworzyć dwie klasy "Ankieta", jedną w katalogu "classes" a drugą w "admin/classes" i w konkretnych klasach pakować to co jest mi potrzebne ? Analogicznie jeśli chodzi o inne moduły typu właśnie "Galeria" lub "Aktualności".

Dodatkowo chciałbym sobie napisać klasę typowo do obsługi połączeń z bazą danych. Oczywiście wykorzystuję PDO w swoich projektach. Tworzyłbym w niej obiekt do połączenia z bazą i wykonywania zapytań. Czyli przykładowo:
2) W klasie "Db" mam oczywiście konstruktor, oraz metody np. "edit", dla której w parametrach przekazuję jakie pola chcę edytować, z jakimi warunkami, limitami, orderami itd. Podobnie w przypadku metody "insert" i innych. Po przekazaniu parametrów konkatenowałbym wszystkie parametry tworząc z tego zapytanie a następnie wykonywałbym np. $this->db->insert("moje zapytanie"); Czy lepiej jednak w samej klasie np. "Ankieta" już wykonywać zapytania?

Ponadto kwestia uprawnień. Chcę utworzyć w swoim portalu system zabezpieczeń grupowych oraz indywidualnych. Wymyśliłem, że wykorzystam serializację. W bazie danych będę trzymał grupy użytkowników oraz dwa pola "zezwolone", "zabronione". Takie same dwa pola będzie miał każdy użytkownik. Uprawnienia użytkownika > grupy. Jeśli grupa ma do czegoś dostęp ale user ma to zabronione to on tam nie wejdzie. Ale jeśli już grupa ma zabronione ale on ma przyzwolenie to może wejść do danego modułu. W większości będę system opierał raczej na grupach, ale nie mogę wykluczyć, że nie zdarzy się sytuacja, gdy jedna osoba będzie musiała mieć zabroniony do czegoś dostęp. Nie chcę wtedy tworzyć specjalnie dla niego osobnej grupy bez jednego uprawnienia.
3) czy jest to rozwiązanie w miarę poprawne? Spotkałem się też z opinią że zamiast serializacji lepiej wykorzystać zwykłe rekordy w bazie danych, w których będą przechowywane jakieś prawa dostępu. Jeśli nie ma danego wpisu = user nie może wejść. Ale tutaj gorzej mi się wydaje będzie zrobić zabronione prawa.

Szukałem rozwiązań po sieci ale ciężko mi znaleźć jakiś dobry, gotowy skrypt, który pomógłby mi podjąć decyzję.

Liczę na pomoc i podpowiedzi, za wszystkie z góry serdecznie dziękuję ! Jak jeszcze mi się przypomną jakieś pytania to będę pisał.

Pozdrawiam smile.gif
kamilos809
1) czy tworząc klasę "Ankieta" powinienem w niej zawrzeć tylko metody dostępne dla strony głównej, czy również te widoczne tylko z panelu admina ?
Moim zdaniem lepiej rozdzielić, wtedy jak zapomnisz, bądź niedopatrzysz czegoś i przez przypadek będzie widoczne dla zwykłego usera, to taki przysłowiowy Jasiu może zrobić trochę bałaganu...

2) W klasie "Db" mam oczywiście konstruktor, oraz metody np. "edit", dla której w parametrach przekazuję jakie pola chcę edytować, z jakimi warunkami, limitami, orderami itd. Podobnie w przypadku metody "insert" i innych. Po przekazaniu parametrów konkatenowałbym wszystkie parametry tworząc z tego zapytanie a następnie wykonywałbym np. $this->db->insert("moje zapytanie"); Czy lepiej jednak w samej klasie np. "Ankieta" już wykonywać zapytania?

Nie wiem jak tam inni sądzą, ale ja sądzę, że klasa Db mogłaby zostać tylko do głównych, najpotrzebniejszych zapytań, tzw. szkieletu, a takie coś jak zapytania do ankiet itp. dać bezpośrednio, żeby bez sensu nie mielić całej wielkiej bazy, ponieważ na chłopski rozum, będzie szybciej.

"Jeśli nie ma danego wpisu = user nie może wejść. Ale tutaj gorzej mi się wydaje będzie zrobić zabronione"
Na moje jeśli zrobisz np. 1=dozwolone 0=niedozwolone otrzymasz efekt którego szukasz...
Mefiuu
hmmm...

1) chyba rzeczywiście tak zrobię. W strukturze katalogów będę miał katalog "classes" w katalogu głównym oraz taki sam w "admin". W pierwszym przypadku będą w klasach pochowane tylko metody, które mają być wykorzystane przez użytkowników na stronie głównej, a w drugim w klasach będą metody tylko do panelu administratora.

2) mówiąc "szkielet" co masz na myśli ? Oczywiście rozumiem, że zapewne instancję pdo, ale co jeszcze (tak dla przykładu) ? Bo jeśli dobrze myślę to jest to dobry sposób aby tworzyć obiekt klasy DB i przekazywać go do konkretnych obiektów, które chcą korzystać z bazy danych zamiast w każdym (dosłownie) obiekcie wykonywać połączenie z bazą danych ?

3) właśnie nie do końca jestem przekonany do tego sposobu, dlatego poczekam jeszcze na wypowiedzi innych użytkowników.

Dodatkowo, mam kolejne pytania. Czy warto rozdzielić rejestrację i logowanie na oddzielne klasy czy połączyć to wszystko w jedną ? Tzn. w jednej klasie mieć metodę sprawdzania poprawności pól przy rejestracji, logowaniu, samo logowanie i inne ? Wydaje mi się, że pewnie warto to rozdzielić, szczególnie, że chciałbym też stworzyć trzecią klasę "User" w której będą metody zmiany hasła, e-maila, jakieś statystyki itd...

Pozdrawiam !
kamilos809
Mam na myśli te najpotrzebniejsze rzeczy jak cały proces wybierania, łączenia z bazą, co tak czy siak pewnie w 80% różnych klas byś to robił i jakieś takie najpotrzebniejsze elementy, które będą się pojawiać często, żeby nie mielić tego samego. Wtedy Ty masz mniej pracy, a w razie ewentualnych błędów, masz mniej kodu do sprawdzania...

Czy warto rozdzielić rejestrację i logowanie na oddzielne klasy czy połączyć to wszystko w jedną ? Tzn. w jednej klasie mieć metodę sprawdzania poprawności pól przy rejestracji, logowaniu, samo logowanie i inne ? Wydaje mi się, że pewnie warto to rozdzielić, szczególnie, że chciałbym też stworzyć trzecią klasę "User" w której będą metody zmiany hasła, e-maila, jakieś statystyki itd...

Moim zdaniem sprawdzanie poprawności pól logowania/rejestracji czy logowanie to nie jest aż tak dużo kodu, żeby było sens to rozdzielać...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.