Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Uprawnienia uzytkowników
Forum PHP.pl > Forum > Przedszkole
mczlowiek
Witam, tworze stronę w której obok adminstratorów bedą zwykli uzytkownicy.
Zastanawiam sie jak nadać (jak zrobić) uprawnienia.

Strona sklada się z 4 działów : Dział1, dzaiał2, dzial3, dział4.

Dział4 składa sie także z 4 poddzialów: dział4A, dział4B, dział4C i dział4D

Jeśli chodzi o administratorów to powiedzmy admin1 - ma dostęp do wszystkiego, admin 2 ma dostęp do działu 1 i działu 2, admin3 ma dostęp tylko do jednego z działów (powiedzmy dział4).

Użytkownicy mają automatycznie dostęp tylko do działu1, natomiast dostępd do pozostalych działów przydziela administrator.

I teraz moje pytanie , czy uzytkowników i administratorow umieśćić w jednej tabeli, czy w oddzielnych - jak zrobić tabelę aby można bylo nadawać takie uuprawnienia?

Prosze o pomoc
Cienki1980
Możesz zrobić to na jednej tabeli ale jak dla mnie byłoby to mało elastyczne rozwiązanie. Ja bym kombinował coś w stylu:
tabela_1 : uzytkownicy

tabela_2 : moduly

tabela_3 : uprawnienia ... jako że powyższe dwie tabele nie potrzebują opisu to podam tylko to co w trzeciej:
id_user | id_modul

Jeżeli dla danego użytkownika jest rekord to znaczy że ma dostęp do modułu określonego w id_modul jeżeli rekordu brak dostępu również brak.
potreb
Właśnie robię podobny system.

Przykładowo mam moduły:
news, pages, email

W tabeli mam zapisane te moduły w tabeli modules:

id, nazwamodulu, nazwafolderu, grupydostepu (1,2,3)

Wchodząc do jakiegoś modułu jeżeli została przypisane tylko jedynka, do admina będą mieli dostęp tylko admini, jeżeli 1,2 tylko admini i moderatorzy itd.

Może jeszcze ktoś inne ci coś lepszego zaproponuje.

No i cienkiego sposób też jest dobry, albo i bardziej elastyczny winksmiley.jpg
mczlowiek
a może ktoś ma jakiś przykład... ?

Cytat(Cienki1980 @ 2.10.2008, 10:08:12 ) *
tabela_1 : uzytkownicy

tabela_2 : moduly

tabela_3 : uprawnienia ... jako że powyższe dwie tabele nie potrzebują opisu to podam tylko to co w trzeciej:
id_user | id_modul

Jeżeli dla danego użytkownika jest rekord to znaczy że ma dostęp do modułu określonego w id_modul jeżeli rekordu brak dostępu również brak.


A co w momecnie jak dany uzytkownik będzie miał dostęp do kilku modułów?
Cienki1980
Cytat(mczlowiek @ 2.10.2008, 10:15:09 ) *
a może ktoś ma jakiś przykład... ?
A co w momecnie jak dany uzytkownik będzie miał dostęp do kilku modułów?


zakładając że admin_1 ma id_user=1

id_user | id_modul
1 | 1
1 | 2
itd.
mczlowiek
masz jakiś przykład? byłbym bardzo wdzięczny
Cienki1980
Cytat(mczlowiek @ 2.10.2008, 10:27:04 ) *
masz jakiś przykład? byłbym bardzo wdzięczny

Nie do końca wiem jakiego przykładu oczekujesz ?

Podałem Ci z jakiej struktury tabel bym skorzystał oraz jak są wpisy do tabeli uprawnienia robione. Teraz od Ciebie zależy jak to wykorzystasz i jak zaimplementujesz.
mczlowiek
czyli podsumowywując:

mamy tak:

DZIAŁ1
DZIAŁ2
DZIAŁ3
DZIAŁ4
----Dział4a
----Dział4b
----dział4c
----dział4d

w modułach robię sobie takie same nazwy (przykładowo) jak te wyżej, np
dział1_odczyt
dział1_zapis
itd

czy poprawne bedzie jesli do modułów dodam moduł administratorzy, tak żeby uzytkownik , który nim nie jest w momencie kliknięcia na link do panleu mogl otrzymać informacje, że nim nie jest i nie ma dostępu

Widzisz to tak mniej więcej?
potreb
  1. <?php
  2. $sql = mysql_query("SELECT * FROM user WHERE name='$name' AND pass='$pass'");
  3. $row = mysql_fetch_row($sql);
  4. define('UserRights', $row[3]);
  5.  
  6. //pliki modulów
  7. $sql = mysql_query("SELECT rights FROM modules");
  8. $row = mysql_fetch_row($sql);
  9. if(UserRights==$row[2]) {
  10. echo "masz dostep";
  11. } else {
  12. echo "brak dostępu";
  13. die();
  14. }
  15. ?>


Prosty przykład, takie naprowadzenie, aczkolwiek zbudowanie takiego systemu wymaga trochę nakładu pracy. Proponuje najpierw stworzyć tabele a później tworzyć skrypt.

Co do twojego przykładu to jest okey, napisz skrypt i jakoś ci pomożemy.
Pilsener
Taki system uprawnień... ja mam tak:
id_zasobu||user_login||flaga

Jest jeszcze problem drzewa - gdy mam tak jak w powyższym:

Cytat
DZIAŁ1
DZIAŁ2
DZIAŁ3
DZIAŁ4
----Dział4a
----Dział4b
----dział4c
----dział4d


- to przykładowo:
dział4||misiek||0 - zabroniony dostęp do działu4 i wszystkich poniżej
dział4||misiek||1 - dostęp do działu 4, ale nie do działów niżej
dział4||misiek||2 - dostęp do działu 4 i działów niżej
dział4||misiek||4 - dostęp do działów niżej i edycja działu 4
- można też łączyć:
dział4||misiek||2
dział4b||misiek||4
dział4c||misiek||0 - dostęp do działu 4 i poddziałów, jednak zabroniony dostęp do działu 4c plus edycja działu 4b

- są problemy typu:
dział4||misiek||0
dział4a||misiek||4 - do działu wyżej dostęp zabroniony, ale do tego niżej nie

Nie wiem czy dobrze robię, ale nic lepszego jak na razie nie wymyśliłem smile.gif
mczlowiek
Nadal męczę się nad uprawnieniami...

Ale ostatnio wymysliłem coś takiego, że można np w tabeli użytkoników dodać pola odpowiedzialne za dostęp do określonych działów, ich edycji itp...

Co o tym myslicie?

TABELA: USERS

user_id
imie
nazwisko
nick
dzial1_viev
dzial1_edit
dzial2_viev
dzial2_edit
...

Standardowo dostęp do dzialow bedzie zablokowany (Wartośc domyślna 0 ), lecz można zmienić mu uprawnienia w panelu (1)

Co sądzicie o takim ukladzie>?
drPayton
A ja proponuję ACL z wykorzystaniem biblioteki Zend'a: http://framework.zend.com/manual/en/zend.acl.html
Dokumentacja precyzyjnie wyjaśnia temat, co do przechowywania - obiekt zend_acl serializujemy i wrzucamy do bazy 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.