Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawa uprawnien
Forum PHP.pl > Inne > Hydepark
Vomit
Uprawnienia, to co neka mnie juz od dłuzszego czasu, nigdy jednak nie chciało mi sie przysiasc i co sklecic. Obecnie, gdy jednak stoje twarza w twarz z problemem, postanowiłem sie poradzic, a raczej spytac jak wy to rozwiazaliscie.

Zastanawiałem sie jak zaznaczyc usera, ktory ma miec przykladowo dostep do jednej podstrony danego serwisu. Strony takie bedzie mozna dodawac i usuwac bez ograniczen, wiec nie mozna tego nadawac uprawnien "na sztywno".

Gdybym mial z gory ustalone 5 podstron, bez podstron "ruchomych" byloby latwiej. Moglbym stworzyc sobie tablice dla kazdego usera, zapisana w bazie np.
  1. <?php
  2. array( 1, 0, 0, 0, 0 );
  3. ?>

Oznaczałoby to, ze user ma dostep tylko do pierwszej podstrony.

Niestety nie mam pomysłu rozwiazac tego dla nielimitowanej ilosci podstron.
pawel_k
sposób jeszcze nie testowany prze mnie, jednak może wypalić.

każdy typ user ma swoją wagę, np. 1 - zwykły, 2 - autor tekstów, 4 - admin
i teraz dla dodawanej podstrony admin dodaje jakie uprawnienia są potrzebne do przeglądania (4,2 lub 1), gdy autor tekstów coś dodaje to uprawnienia ustawiane są na 2. zwykły użytkownik może tylko przeglądać.

i teraz w zależności kto wchodzi na stronę porównujesz jego wagę z wagą strony, np wchodzi admin (4) na stronę o wadze 2: (4 >= 2) -> true, wchodzi user (1) na stronę o wadze 2 -> (1 >= 3) -> false.

nie wiem czy to będzie wygodne w praktyce ale chętnie posłucham krytyki :]
LBO
hmmm, pomysl za bardzo "jednowymiarowy" przydatne w wypadku gdy strona to pojedyncze forum, jednak gdy mamy do czynienia z serwisem gdzie zintegrowanych jest kilka mechanizmow (forum, system newsow, artykuly) lepiej jest nadawac dla kazdej akcji (jawnej akcji: dodanie newsa, kasowanie artykulu itp) unikalny identyfikator, a w bazie danych o userze umiescic kolejne identyfikatory jego uprawnien np. dla komorki (DB) uprawnienia
Kod
da ua dn un
gdzie da - dodaj artykul, usun artykul, dodaj news, usun news... uprawnienia takie (tak przechowywane) w latwy sposob mozna wrzucic do tablicy za pomoca
  1. <?php
  2. $uprawnienia = explode(' ', $row['uprawnienia'])
  3. ?>
...

sposob taki w idealnie nadaje sie do obiektowego programowania np.
  1. <?php
  2.  
  3. $User->sprawdzUprawnienia($KasujArtykul->potrzebneUprawnienia($idArtykulu));
  4.  
  5. ?>
spenalzo
Maski bitowe tongue.gif
LBO
Cytat(spenalzo @ 2006-03-31 06:21:14)
Maski bitowe tongue.gif

czy chodzi Ci o flagi? jezeli nie, jest jakis temat o nich?
spenalzo
Nie pamiętam jak sie to dokładnie nazywa - chodzi o zapisywanie uprawnień w formacie np. "11110001" itd itp
Na pewno było o tym na forum nie raz.
Vogel
kiepski pomysl. tez kiedys tak robilem, ale teraz zmadrzalem ;]

struktura wygladalaby tak:

uzytkownik [ id, imie ]
grupa [ id, nazwa ]
grupa_uprawnienia [ grupa_id, id_prawa, stan_prawa ]
grupa_uzytkownik [ grupa_id, uzytkownik_id ]

w ten sposob mozemy tworzyc grupy uprawnien i przypisywac do danych grup uzytkownikow. uprawnienia to zbior indywidualnych pozwolen do dokonania operacji (tak jak to radizl LBO).

reguly (pamietaj ze user moze byc w kilku grupach jednoczesnie!):
I. zakaz - bezwzglednie zakazane
II. dozwolone - dozwolone, chyba ze zakazane
III. brak okreslonego prawa - zabronione, chyba ze dozwolne

mozemy tez dodac sobie pomocnicza tabele
uprawnienia [ id, nazwa ]
ktora przyda sie w panelu konfiguracyjnym ;]

mozesz tez dodac tabele "uprawnienia efektywne" w ktorej bedziesz cachowal faktyczny stan upranwien dla konkretnych uzytkownikow (uzytkownik_id, prawo_id, stan_prawa) - bo po co joinowac w nieskonocznosc przy sprawdzaniu jednego uprawnienia?
Diwi
Może po prostu skorzystaj z phpGACL (http://rzseattle.piwko.pl/phpGACL.htm), ostatnio zaczynam się tym bawić i jestem zdumiony możliwościami.

Pozdrawiam
Speedy
Można ten problem rozwiązać tak:
Załóżmy, że dane przechowujesz w bazie i masz tabelę z podstronami i drugą tabelę użytkownikami.
Każdej podstronie możesz przyporzadkować unikatowy ID, a następnie w tabeli z użytkownikami tworzysz pole odpowiedzialne za uprawnienia do wyświetlania podstron.
W tym polu przechowywujesz informację o tym, do jakich podstron ma dostęp dany użytkownik - dane mogą mieć następującą postać:
Kod
1;3;7

gdzie 1, 3 i 7 to ID podstron. Później robisz z tego odpowiednią tablicę i sprawdzasz, czy wybrany przez użytkownika ID podstrony zgadza się z jego uprawnieniami.
spenalzo
W takim wypadku lepiej zrobić nową tablicę:
id_strony | id_uprawn
itd itp - bedzie to wygodniejsze i szybsze.
Vomit
Dziekuje za wypowiedzi. Daja mi one do myslenia, ale przynajmniej mam nad czym myslec a nie pustke w glowie winksmiley.jpg
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.