Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Podstawy obiektowego ACL
Mefiuu
post
Post #1





Grupa: Zarejestrowani
Postów: 371
Pomógł: 18
Dołączył: 23.11.2008

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


Witam. Zwracam się do Was z prośbą o porady. Planuję stworzyć portal, ma być dość rozbudowany. Zastanawiałem się jak stworzyć listę ACL, czytałem nieco w sieci na ten temat, ostatecznie skrobnąłem taki kawałek kodu:


  1. public function check($group_id) {
  2. $stmt = $this->pdo->query("SELECT * FROM groups WHERE group_id='$group_id'");
  3.  
  4. $this->privilages = $stmt->fetch(PDO::FETCH_ASSOC);
  5.  
  6. $stmt->closeCursor();
  7.  
  8. return $this->privilages;
  9. }


Jest to funkcja zawarta w klasie, jako parametr przekazuję $_SESSION['group_id'], które przypisuję sobie podczas logowania. Po wykonaniu takiego skryptu w tablicy mam zawarte wszystkie uprawnienia dla grupy. W tabeli to wygląda mniej więcej tak:

grupa | NA | WW | EA |
===============================
Administratorzy | 1 | 1 | 1 |
--------------------------------------------------------
Moderatorzy | 1 | 0 | 1 |
--------------------------------------------------------
Użyszkodnicy | 0 | 0 | 0 |
===============================


Jak widać, nagłówki odpowiadają za poszczególne prawa. 1 logiczna ma dostęp, 0 nie ma. Przypuśćmy że chciałbym dla użytkowników ustalać menu:

  1.  
  2. echo "<a href='#'>Dodaj plik</a>"; //dostępne dla wszystkich
  3. if ($login->privilages['NA'] == 1) echo "<a href='#'>Nowy artykuł</a>"; // dostęp dla Adminów i Moderków
  4. if ($login->privilages['WW'] == 1) echo "<a href='#'>Wyślij wiadomość</a>"; // Dostęp tylko dla Admina
  5. if ($login->privilages['EA'] == 1) echo "<a href='#'>Edytuj artykuł</a>"; // Dostęp dla Admina i Moderka
  6.  



Moje pytanie jest takie. Zakładając (przy najlepszych wiatrach), że będę miał w bazie wielu użytkowników (liczmy kilkanaście tysięcy), czy to BĘDZIE WYDAJNE ? Nie wiem jak inaczej można byłoby to rozwiązać, to rozwiązanie wydaje mi się całkiem sensowne, ale proszę o poradę bardziej doświadczonych użytkowników.

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





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


  1. $role = array('user', 'moderator', 'admin');
  2. $acl->addRole($role);


A to skąd pobierzesz $role, to nie ma znaczenia (IMG:style_emoticons/default/wink.gif) Po prostu umieść je w bazie jako kolejne rekordy w odpowiedniej tableli, bo może być ich klika, lub bardzo dużo. Rola użytkownika to tak jak piszesz, może być obok loginu, w końcu ona mało kiedy się zmienia i zazwyczaj jest pobierana przy logowaniu w sesję.

Cytat
Właśnie, Ty tutaj mówisz o tym, że moje identyfikatory dostępów nie są jasne. Jak to wykonać ?

Rozpracuj pierw ten kod na "plikach" tak jak tam jest, pomyśl nad tym jak on działa (wywal to z Zend, chodzi o same moduły i nazwy metod)

Cytat
Poza tym w artykule też jest to rozegrane na IF'ach, tylko w nieco inny sposób niż u mnie

Tylko że u Ciebie jest albo 0 albo 1 i to ogranicza działanie o którym wspomniałem.
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: 11.10.2025 - 01:30