Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prawa dostępu
Forum PHP.pl > Inne > Hydepark
TomASS
Cześć.

Robię sobie tabele w MySQL i w niej kilka setek rekordów. Mam tabelę użytkowników. I teraz chciałbym znaleźć jakiś ciekawy mechanizm na stworzenia praw dostępu do konkretnych rekordów przez użytkoników. Może ktoś ma jakiś pomysł, bo ja główkuje i wygłówkować nie mogę sad.gif
sf
dodatkowa kolumna okreslajaca prawo/grupe praw dostepu, lub dodatkowa tabela przechowujaca identyfikator z tej pierwotnej tabeli i prawa dostepu
Alchemy_A.R.T.
syf ma racje - mozesz np. dodac kolumne prawa i tam cyfry 0-9 gdzie kazda cyfra to inne uprawnienia, np. 0 to nic nie moze robic, 1 to dodawac posty, 2 dodawac i usuwac itp. albo prawa np. w formie 000 i rozbijasz to na kazdy znak i sprawdzasz - jesli jest 0 to nie ma prawda wykonania danej czynnosci jesli jest 1 to ma
TomASS
Noto załóżmy, że mamy 3 użytkowników i 10 rekordów w bazie (czy to będą zamówienia, czy produkty to już nie ważne). I teraz każdy z nich ma różne uprawnienia dla różnych rekordów. Przeciesz tego nie da się zrobić za pomocą jednej kolumny :/
nospor
na upartego się da. Zawartośc tego pola:
typPrawa|rekord1,rekord2,rekord3;typPrawa|rekord1,rekord4,rekord6 ...

gdzie:
typPrawa - np liczba okreslajaca prawo
| - oddziela typ prawa od przypisanych mu rekordów
rekord1, rekord2, ... - id rekordów
, - oddziela rekordy
; oddziela zestawy typPrawa i rekordy

potem pobierasz taką kolumne i rozbijasz w php.

Ale to tak na upartego i niekoniecznie optymalnie. Jak bede miał czas to moze cos innego wymysle

edit:

opcja 2:
dodatkowa tabela, która trzyma ID_UZYTKOWNIK, ID_PRAWA, ID_REKORDU

lub wersja skrócona (co do ilosci rekordów w tej tabeli):
ID_UZYTKOWNIK, ID_PRAWA, ID_REKORDÓW
jest to wersja skrócona, gdyż w polu ID_REKORDÓW przechowywać kilka id

oczywiscie obie opcje opieraly sie na zalozeniu, ze user może miec różne prawa do jednego rekordu
mike
A ja bym dał tak zwaną tabelę haszującą lub jak to inni mówią łączącą.

Wtedy sytuacja wyglądałaby tak:
1. Tabela users:
userId | jakieś inne pola

2. Tabela (na przykład) products:
productId | jakieś tam pola

3. Tabela connections
userId | productId

W tabeli 3. kluczem są dwa pola (jedyne dwa pola). I pobierasz:
  1. SELECT *
  2. FROM connections WHERE userId = 1

... masz wszystkie produktu do krórych ma prawo user 1.

Banalne rozwiązanie.
TomASS
Dobre rozwiązanie z tablicą haszującą, można nawet dodać dodatkowe pole 'TypUprawnienia'.

Ale co będzie jak dodam produkt? Czyli musze oprócz tablicy produkty uzupełnić tablicę haszującą podpierając się tablicą użytkowników (aby pobrać ich ID).
mike
Cytat(TomASS @ 2005-09-27 14:32:00)
Ale co będzie jak dodam produkt?

Przy dodawaniu produktu, użytkownika lub przy zmianach co do dostępu, i.t.d. musisz uaktualniać tablicę haszującą.
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.