Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Panel admina
Forum PHP.pl > Forum > PHP
bartg
Aktualnie w swoim FW mam wszystko podzielone na akcje (obsługują całość, wywoływane ręcznie lub prze url), modele (pobieranie danych) i widoki (wiadomo) [poprostu MVC]. Jak mam formularz dodawania powiedzmy newsa to mam newsForm akcje i akcje news, ktora dodaje dane. Aktualnie to wszystko mam nijak wrzucone (wszystkie linki) do jakiegos widoku w panelu usera i jak masz prawa to sie wyswietla (np. "Dodaj news"). Mam w takim razie pytanie jak ładnie i elegancko rozwiązać PA.

Pozdr BartG
.radex
Nie rozumiem - co jest problemem?

Ja na przykład mam (w dużym skrócie) w folderze gdzie mam także modele, kontrolery i widoki, kontrolery panelu admina. Są one tak samo zbudowane jak "normalne" kontrolery, ale są one wykonywane tylko w panelu admina - tak więc tak samo jak "normalne" pobierają dane z modelów i wyświetlają je za pomocą widoków (widoki i modele są wspólne dla obu typów kontrolerów). A z prawami to mam po prostu do tego osobną tabelę w której są zapisane konkretne uprawnienia (nie dla danego użytkownika, tylko dla grupy użytkowników - bo przecież większość userów ma takie same uprawnienia, są jednak wyjątki) i przy pobieraniu danych użytkownika za pomocą JOIN pobieram jednocześnie jego uprawnienia. No i wtedy po prostu if($user->nazwa_uprawnienia == 'oczekiwana wartość')
bartg
Uprawnienia mam podobnie. Chodzi mi tylko o to że nie chciałbym rozdzielać kontrolera dal userów i adminów. Czemu? Bo np edycja komentarza prze 5 min jest dla każdego a przez reszte dla wszystkich.
bim2
Własnie chodzi o szybkość tworzenia. Jestem w stanie poświęcić miesiąc na szukanie rozwiązania, żeby później zaoszczędzić te 10min pisania. smile.gif Edycja komentarza w PA i przez usera łączą się nawzajem. Ale powiedzmy, że damy je osobno.

Teraz, jak rozwiązać wyświetlanie linków edycji przy newsie? Mogę dać prymitywnie
  1. `<a href="Admin/News/edit?id=$id">Edytuj</a>`

Ale czy nie da się tego jakoś by zautomatyzować? Tak musiałbym dopisywać kolejne linki (etc. usuń). Może
  1. $news.title (@adminLinks[News|$id])

Wtedy mógłbym zrobić jakąś metodę w każdej akcji newsa w PA, albo zmienną.

Nie powie ktoś jak to rozwiązuje?
erix
To wtedy piszesz sobie odpowiednie metody w DAO/modelu, jaki problem? winksmiley.jpg

Osobiście uważam, że nie ma sensu maltretować skryptu dodatkową logiką administratorów, skoro w większości żądań nie jest ona potrzebna.
bim2
Z bratem robimy już gotowe, że się wyraże klocki. Później przy zleceniu to się wszystko łączy -> userzy, grupy, prawa, strony statyczne, newsy, komenty itd. (skreślic co nie potrzebne biggrin.gif)
I teraz potrzebuję czegoś co będzie w każdym folderze "klocka" (tj. Application/News). Mogę dać Application/News/Administration/ ale nie widzę sensu tworzenia kolejnych akcji. Powiedzmy, że chce zmienić baże na postreSql. I mam siękatwoać otwieraniem 4 plików zamiast dwóch? Później szukanie wszystkiego ;/ Nie dziękuję... Może zrobić poprostu na początku akcji
  1. <?php
  2. public function editNews()
  3. {
  4. $this->startAdmin();
  5. $iId = $this->getInt('id');
  6. // ......
  7. }
  8. ?>

Zmieniało by to uprawnienia, IndexUp.tpl i IndexDown.tpl na odpowiednik administratorski? Jak myślicie?
Pilsener
Ja robię zazwyczaj tak, że każdą akcję w panelu (np. edycja komentarza do newsa, skasowanie komentarza do newsa etc.) systematyzuje - dostaje swój ID oraz opis (potem jak to widzę to łatwiej mi ogarnąć), każdy użytkownik może wykonywać tylko akcje o określonym ID, co łatwo sprawdzić prostą funkcją - dzielenie użytkowników typu "Starszy newsman" nie wydaje mi się dobre - może to być pewne uproszczenie, podobnie jak grupa o której pisał Radex, jednak lepiej prezycyjnie dodawać uprawnienia na zasadzie "co nie jest dozwolone, jest zabronione", oczywiście uprawnienia warto sklasyfikować zgodnie z logiką drzewa.

Trudniejsze wydaje mi się pogodzenie uprawnień akcji z uprawnieniami obszarowymi (dostępy do określonych kategorii serwisu).
bim2
Mam cały system zarządzania prawami i to nei jest problemem. Dostęp do danego newsa, artykułu także na razie nie jest mi potrzebny. Potrzebuję uniwersalnego, prostego sposobu na tworzenia Panelu Administracyjnego. Strona główna PA to nie problem, bo zrobię to jako akcję, menu także nie jest problemem bo dam if($oController->isAdminMode()) { $oController->getAction('Global', 'adminMenu'); } i pobierze mi konkretne dane. Problemem jest samo zarzadzanie i jego położenie.
Czy w Application/news/Admin_View.class.php czy w folderze, czy korzystac z modeli zwykłego modułu, czy robić osobne modele?
.radex
Cytat(Pilsener @ 10.02.2009, 11:58:16 ) *
może to być pewne uproszczenie, podobnie jak grupa o której pisał Radex, jednak lepiej prezycyjnie dodawać uprawnienia na zasadzie "co nie jest dozwolone, jest zabronione"


No właśnie u mnie można dokładnie dodawać uprawnienia. Po prostu w przypadku większości użytkowników ładowany jest ten sam zestaw uprawnień (ten sam rekord z tabeli privileges)

Cytat
Czy w Application/news/Admin_View.class.php czy w folderze, czy korzystac z modeli zwykłego modułu, czy robić osobne modele?


Jeden model. Po co dwa, skoro część działań wykonywanych przez model się powtarza i w PA i na samej stronie.
bim2
Ale nie zawsze? Czy nie warto rozdzielić to na dwa modele?
  1. <?php
  2. $this->model('tutaj model z admina');
  3. $this->parentModel('model z normalnych commentow');
  4. ?>


No dobra, teraz wszystko sprowadza się do obsługi menu. na razie pobieram listę folderów application/ i sprawdzam czy są pliki admina. Jak są, to wyświetlam kategorię. A jakbym chciał podkategorię?
User
- Dodaj
- Przeglądaj

Tak jak w WP?

Myślałem o zastosowaniu metody statycznej
  1. <?php
  2. public static function getMenu()
  3. {
  4.  return array('costam' => 'user/delete');
  5. }
  6. ?>

I w menu Administration_User::getMenu();
Ale czy to dobre rozwiązanie?
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.