Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> System uprawnień - organizacja kodu
404
post
Post #1





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 22.05.2011

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


Witam!
Stworzyłem sobie prosty system uprawnień i zastanawiam się nad organizacją kodu...
  1. class SSE_Group
  2. {
  3. private $db,
  4. $id,
  5. $hash,
  6. $name;
  7.  
  8. public function getId();
  9. public function setId();
  10.  
  11. //...
  12.  
  13. };

  1. class SSE_GroupArray
  2. {
  3. public $groupsArray = array();
  4. };

  1. class SSE_GroupDatabase : public JakasKlasaDoObslugiBazyDanych
  2. {
  3. private $db;
  4.  
  5. public function insert(SSE_Group $group);
  6. public function delete($groupId);
  7. public function select(SSE_GroupArray &$groups);
  8. public function update(SSE_Group $group);
  9.  
  10. //...
  11. };

Wiem, że to mój kod, wiem, że "powinienem pisać tak jak umiem", ale prosiłbym o jakieś wskazówki bądź przykłady rozwiązań w waszych aplikacjach (IMG:style_emoticons/default/smile.gif) Ogólnie rzecz biorąc to chciałbym, aby ten kod był elastyczny i w miarę łatwy w rozwoju.

Ten post edytował 404 20.01.2012, 00:00:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
by_ikar
post
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Całości ci nie pokaże, bo bym musiał się sporo przy tym naprodukować żeby to opisać.. Generalnie musiałbyś mieć jedną klasę która by sprawdzała uprawnienia: jeżeli niezalogowany, przekierować na stronę logowania, jeżeli po zalogowaniu nadal ma nieodpowiednie uprawnienia poinformować odpowiednim komunikatem. U mnie to jest klasa Authentication, która zarówno autoryzuje użytkownika login/logout jak i w metodach prywatnych sprawdza użytkownika, co określony czas regeneruje sesje i aktualizuje "ostatnią wizytę" użytkownika w bazie danych. Jeżeli znajdę trochę więcej czasu, to mogę spróbować wrzucić te klasy, i je opisać. Tyle że to nie są jakieś osobne klasy, które bez problemu dołączyć do jakiegoś innego systemu, bo nie miałem takiego zamiaru tworząc je. Tak też może być ciężko "skopiować" moje rozwiązanie. Najbardziej uniwersalna z tego wszystkiego jest klasa użytkownika, która z podstawowymi danymi jest tworzona jako pierwsza, zaraz za nią inicjowana jest klasa Authentication, która na podstawie wcześniej inicjowanej klasy User, sprawdza kto jakie ma uprawnienia. A całość inicjuje tak:

  1. if(Config::has('framework.default_database') && Config::has('framework.session') && Config::has('framework.users'))
  2. {
  3. $this->container->setService('user.manager', new UserManager($this->container->getService('database')));
  4. $this->container->setService('user', new User());
  5. $this->container->setService('user.auth', new Authentication($this->container));
  6. $this->container->setService('group.manager', new GroupManager($this->container->getService('database')));
  7. }


A klasa użytkownika, bo w sumie jest najbardziej uniwersalna wygląda tak: https://gist.github.com/1647691 u siebie mam podział na podstawowe pola, oraz pola dodatkowe, takie które można przykładowo z poziomu panelu administratora sobie stworzyć w bazie danych (IMG:style_emoticons/default/wink.gif) większość to są same setery/getery więc za bardzo nie ma co opisywać. Jedynie hasRole, coś tam bardziej skomplikowanego robi.

Więc inicjując klasę User, tworzę "gościa". Na tej podstawie mogę sprawdzić poprzez isUser czy faktycznie jest użytkownikiem, a następnie sprawdzić jego uprawnienia.

  1. if($this->user->isUser())
  2. {
  3. if(false === $this->user->hasRole($role))
  4. {
  5. throw new AccessDeniedException();
  6. }
  7. } else
  8. {
  9. $this->session->set('_user_redirect_url', $this->request->getUri());
  10.  
  11. return new RedirectResponse(Config::get('framework.users.login_url', '/login'));
  12. }


Dodatkowo w przypadku kiedy nie jest użytkownikiem, zapisuje w sesji adres na który ma wrócić po zalogowaniu, a następnie przekierowuje na stronę logowania.
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: 9.10.2025 - 11:14