Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> panel administracyjny w frameworkach
Apo
post
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


Witam
Natrafiłem na następujący problem podczas pisania frameworka:
Na podastawie adresu http://strona.pl/controller/action wywołuje odpowiedni obiekt controllera a potem metode na podstawie nazwy akcji. No i powiedzmy ze kontroler nazywa sie 'newsy' czyli mam folder newsy a w nim główny plik kontrolera news.php i w nim wszystkie metody np: 'wyswietlNews', 'archiwum' oraz te co powinny być dostępne z panelu administrcyjnego: 'edytuj', 'akceptuj', 'dodaj', ale nie wiem jak skutecznie rozwiązać prolem z logowaniem aby np po przejsciu do innego kontrolera ('forum') nie trzeba było sie pomownie logować. Chodzi mi o przykładowe API z waszych frameworków (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam Apo
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Apo
post
Post #2





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


@Ludvik rozpisales sie z tym kodem ;P

Wkońcu zaczełem pisać obsługe autoryzacji i mam takie cos:

  1. <?php
  2.  
  3. class Auth {
  4.  
  5. private $perms = array();
  6. private $groups = array();
  7. private $cursor;
  8.  
  9. const OWN = 'OWN';
  10. const ALL = 'ALL';
  11.  
  12. public function __construct()
  13. {
  14.  
  15. }
  16.  
  17. public function define($name, $level=null)
  18. {
  19. $level = isset($level) ? self::ALL : self::OWN;
  20. $this->perms[$name] = array($name, $level);
  21. }
  22.  
  23. public function addGroup($name)
  24. {
  25. if(isset($this->groups[$name]))
  26. throw new AuthException('Group "'.$name.'" already exists in auth');
  27.  
  28. $this->groups[$name] = array();
  29. $this->cursor = $name;
  30. return $this;
  31. }
  32.  
  33. public function addPermission($name)
  34. {
  35. if(!isset($this->perms[$name]))
  36. throw new AuthException('Permission "'.$name.'" not defined');
  37.  
  38. $this->groups[$this->cursor][$name] = $this->perms[$name];
  39. return $this;
  40. }
  41.  
  42. public function __destruct()
  43. {
  44. echo '<br><b>Permisssions:</b> <br>';
  45. echo '<pre>'.print_r($this->perms, 1).'</pre>';
  46. echo '<br><b>Groups:</b> <br>';
  47. echo '<pre>'.print_r($this->groups, 1).'<pre>';
  48. }
  49. }
  50. ?>


Api dla nadawanie praw i grup wygląda tak:

  1. <?php
  2. try {
  3. $auth = new Auth('newsView');
  4. $auth->define('read', 1);
  5. $auth->define('edit', 1);
  6. $auth->define('write');
  7.  
  8. $auth->addGroup('quest')
  9. ->addPermission('read')
  10.  
  11. $auth->addGroup('moderator')
  12. ->addPermission('read')
  13. ->addPermission('edit')
  14. ->addPermission('write')
  15. } catch(AposException $e)
  16. {
  17. echo $e->getMessage();
  18. }
  19. ?>


No i w moim frameworku akcje wyglądają tak że każda akcja np newsView, newsEdit to osobna klasa w osobnym pliku która dziedziczy klase abstrakcyjną akcji. No i chciałem do tego pliku z akcją dołączyć pomocniczą klase dostępu (newsViewAuth, newsViewEdit) gdzie będzie klasa dziedziczącą klasę autoryzacji do sprawdzania dostępu:

  1. <?php
  2. class NewsViewAuth extends AuthCheck {
  3.  
  4. public function _checkAuth()
  5. {
  6.  $this->groupCheck('quest');
  7. }
  8. }
  9.  
  10. // ... klasa NewsViewAction ...
  11. ?>


W dispatherze który wywołuje obiekt odpowiedniej akcji najpierw sprawdzałbym czy dany użytkownik ma do niej prawa o potem dopiero wywoływał jej obiekt. Niewiem gdzie czymać tablice z grupami i prawami dostępu do odpowiednich akcji no i kiedy je tworzyc. User miałby swoją tablice z prawami zapisaną w bazie i przy logowaniu zapisze ją do $_SESSION['security'] (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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: 3.10.2025 - 20:01