Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Struktura grup dostępu
Forum PHP.pl > Forum > PHP
Black-Berry
Wymyśliłem system na typy użytkowników i grupy dostępowe do swojego CMS'a. Zanim to wdrożę chciałbym poznać jakieś opinie na ten temat.

  1. tabel_mysql_account_types
  2. +----+------+
  3. | ID | NAME | Tabela typów kont będzie zawierała te główne pola.
  4. +----+------+
  5. | 1 | user | ( będą też inne takie jak np 'DESCRIPTION' ale te 2 są kluczowe )
  6. | 2 |guest |
  7. | 3 | vip |
  8. +----+------+

  1. tabel_mysql_access_types
  2. +----+------+-----------+
  3. | ID | NAME | CONDITION | Tabela grup dostępowych
  4. +----+------+-----------+
  5. | 1 | ALL | >=0 | te warunki będą mogły BYć kilku członowe np:
  6. | 2 | users| ==1 | '>=12; <=23; ==3'
  7. | 3 |admins| >=5 | odpowiendni parser PHP rozbije TO na warunek dla zalogowanego usera.
  8. +----+------+-----------+

Jeśli mój pomysł jest niejasny to jeszcze kilka słów wyjaśnienia:
-- użytkownik loguje sie i w sesji trzymane jest jego ID z tabeli 1
-- każdy element strony ma swój numer trubu dostępowego z tabeli 2 (np. Artykuł: 'fiołki i motylki' ma numer 3.
-- Jeśli zalogowany użytkownik próbuje się dostać do artykułu 'fiołki i motylki' system ładuje z bazy 3 rzad i sprawdza czy user moze przeczytac ten artykuł.

Wiem, że było to juz opisywane ale zależy mi na możliwie najrostszym rozwiązaniu a ten wydaje się takim być. Proszę o wskazanie ewentualnych wad tego mechanizmu.
arecki
Ja bym zrobił tak że artykuł ma tryb dostępu opisany unikalnie za pomocą potęgi cyfry 2. W grupach do których należy użytkownik lub w samych użytkownikach, dostęp do artykułów opisał binarnie za pomocą sumy trybów dostępu artykułów. Potem tylko proste sprawdzenie bitowe AND i już wiesz który użytkownik do którego artykułu ma mieć dostęp smile.gif
Black-Berry
Mógłbyś napisać coś więcej? Robiłeś już tak kiedyś? Czy da się dzięki temu rozwiązaniu zrobić warunek 'wszystkie konta których id > 12, mniejsze od 15 lub konta o id = 5' ?
arecki
Jak będę miał chwilkę to napiszę coś dla przykładu.

To tak na szybko masz przykład:
  1. <?php
  2. $users= array(
  3. array('id'=>1, 'name'=>'John', 'accessTo'=>bindec('0010')),
  4. array('id'=>2, 'name'=>'Mary', 'accessTo'=>bindec('0100')),
  5. array('id'=>3, 'name'=>'Greg', 'accessTo'=>bindec('1011')),
  6. array('id'=>4, 'name'=>'Bill', 'accessTo'=>bindec('0011'))
  7. );
  8.  
  9. $documents = array(
  10. array('name'=>'Broń jądrowa - domowe sposoby produkcji', 'accesscode' => 1),
  11. array('name'=>'Cielęcina jagnięca dla opornych', 'accesscode' => 2),
  12. array('name'=>'Jak przeprowadzić rozmowę telefoniczną w 10 zdaniach. Praktyczny poradnik dla Pa
    ń'
    , 'accesscode' => 4),
  13. array('name'=>'RTFM - przyjazne zwroty w Usenecie', 'accesscode' => 8)
  14. );
  15.  
  16. foreach ($users as $user) {
  17. echo '<strong>'.$user['name'].'</strong><ul>';
  18. foreach ($documents as $document) {
  19. echo '<li>';
  20. if((intval($user['accessTo']) & intval($document['accesscode'])) == intval($document['accesscode'])) {
  21. echo '<span style="color:#00f">może</span>';
  22. } else {
  23. echo '<span style="color:#f00">nie może</span>';
  24. }
  25. echo ' czytać "'.$document['name'].'"</li>';
  26. }
  27. echo '</ul>';
  28. }
  29.  
  30. ?>


Możesz do tego dołożyć grupy dostępu. Wtedy grupom przypisujesz podobne maski jak userom. Jeżeli będziesz chciał połączyć uprawnienia usera z grupą to wykonujesz operację OR na wartościach obu i dopiero wtedy AND z otrzymanej wartości z dostępem do dokumentu. Miłego kombinowania smile.gif
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.