TomASS
27.09.2005, 08:43:05
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ę
dodatkowa kolumna okreslajaca prawo/grupe praw dostepu, lub dodatkowa tabela przechowujaca identyfikator z tej pierwotnej tabeli i prawa dostepu
Alchemy_A.R.T.
27.09.2005, 11:18:25
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
27.09.2005, 13:14:43
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
27.09.2005, 13:21:39
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
27.09.2005, 13:28:33
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
connectionsuserId | productId
W tabeli 3. kluczem są dwa pola (jedyne dwa pola). I pobierasz:
SELECT *
FROM connections WHERE userId = 1
... masz wszystkie produktu do krórych ma prawo user 1.
Banalne rozwiązanie.
TomASS
27.09.2005, 13:32:00
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
27.09.2005, 13:44:34
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.