Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Rozwiązanie problemu z dostępem
mma
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 30.11.2007

Ostrzeżenie: (0%)
-----


Witam!
Od pewnego czasu poznaje mvc i natrafiłem na ciekawy tutorial na http://www.phpit.net/article/simple-mvc-php5/ .
Bardzo mi podeszło to co tam jest przedstawione - myśle, że na początek jest idealne. I, że będe to mugł (mvc) wykorzystywać jako podstawe w kolejnych aplikacjach PHP.

Ale do rzeczy, przechodząc przez ten tutorial - przerabiając cześciowo itp. , zastanawia mnie jeden fakt...
Jak zrobić dosęp do panelu administracyjnego , chciałbym to zrobić w ruterze no i właśnie, nie za bardzo wiem który z pomysłów wybrać.
Mam dwa pomysły na dzień dzisiejszy - jeden to sytuacja w którym sprawdzany jet czy podkatalog w sciezce jest katalogiem administracyjnym
np:
  1. <?php
  2. //$parts - cześci ścieżki np admin/index, admin =>[0] index=>[1]
  3. if ($parts[0] == ADMIN_FOLDER) {
  4. if (!($this->_registry->auth->isLoggedIn() && $this->_registry->user->isAdmin()))
  5. $this->redirect('index');
  6. }
  7. ?>

Powyższa sytuacja zdaje się być dobra gdy użytkownika zaogowany to admin i nikt więcej.

Drugie rozwiązanie to system praw zapisywanych/odczytywanych z bazy danych (zserializowana tabela).

W ruterze wykonywana by była funkcja mapująca (ja to tak widze) - sprawdzająca otrzymaje prawa z powiązaniami prawo - kontroler.

Jeśli ktoś się zastanawia o co mi chodzi, to chodzi o to czy ma ktoś jakies inne pomysły na rozwiązanie tego zadania, które można by tak w około >80% używać w przyszłości.
Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
splatch
post
Post #2





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(mma @ 4.12.2007, 11:22:08 ) *
W ruterze wykonywana by była funkcja mapująca (ja to tak widze) - sprawdzająca otrzymaje prawa z powiązaniami prawo - kontroler.

Tworzysz odrębną klasę do sprawdzania uprawnień, następnie przekazujesz referencje do FrontController-a i w nim weryfikujesz czy user ma prawo do akcji.

  1. <?php
  2.  
  3. // ogólne akcje widziane przez wszystkich
  4. interface Action {
  5. public function execute();
  6. }
  7.  
  8. // akcja wymagająca logowania/uprawnień
  9. interface SecureAction extends Action {
  10. public function getCredentials();
  11. }
  12.  
  13. class AdminIndex implements SecureAction {
  14. public function execute() {
  15. // tu jakaś logika
  16. }
  17.  
  18. public function getCredentials() {
  19. return array('Admin.Index');
  20. }
  21.  
  22. }
  23.  
  24. // obsługa uprawnień
  25. interface SecurityManager {
  26. public function canExecute(SecureAction $a);
  27. }
  28.  
  29. interface User {
  30. public function getName();
  31. public function getCredentials(); // uprawnienia użytkownika
  32. }
  33.  
  34. // jakaś implementacja security managera
  35. class DummySecurityManager implements SecurityManager {
  36. public function canExecute(SecureAction $a, User $user) {
  37. $cred = $a->getCredentials();
  38. $userCred = $user->getCredentials();
  39.  
  40. $diff = array_diff($cred, $userCred);
  41. if (sizeof($diff) == 0) {
  42. throw new AuthorizationException($diff);
  43. }
  44. return true;
  45. }
  46. }
  47.  
  48. class FrontController implements Controller {
  49.  
  50. public function __construct(SecurityManager $man) {
  51.  
  52. }
  53.  
  54. // i tu dalej coś tam...
  55. }
  56.  
  57. new FrontControler(new DummySecurityManager());
  58. ?>
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 23:56