
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
