TomASS
28.01.2011, 09:08:24
Cześć,
Rozważam wprowadzenie w swojej aplikacji systemu uprawnień.
Mam kilkanaście tabel w których każdy rekord może mieć pola
ID_pole1
ID_pole2
ID_pole3
itd...
każdy użytkownik może mieć zupełnie inny zestaw rekordów.
Myślałem nad tym aby jakoś tworzyć stringa doklejanego do KAŻDEGO zapytania w aplikacji w klauzuli WHERE, tylko pojawiają się problemy:
- jak zarządzać z poziomu administratora takim "srtingiem" - czyli dodawać i odbierać uprawnienia
- w jednej tabeli może np. brakować pola ID_pole2 i wówczas doklejając do tego zapytania "standardowy" string uzyskamy błąd
- jak takie coś trzymać w bazie danych?
Dzięki za podsunięcie pomysłu.
thek
28.01.2011, 10:46:51
System uprawnień powinieneś rozwiązać na kilku poziomach. Ogólnie jest to temat dość obszerny, więc na początek radziłbym byś najlepiej poczytaj ciutkę o ACL, RBAC, DAC i MAC a powinno Ci się wyjaśnić co z czym jeść. Chodzi konkretnie o ustawianie użytkownikom roli, uprawnień grupowych, indywidualnych, do zasobu i tego, czy sami mogą własne reguły dostępu określać. Brzmi skomplikowanie, ale jest proste w zrozumieniu. Gorzej ciut z implementacją, ale jeśli ktoś przemyśli wszystko dobrze, to z reguły nie ma większych problemów.
Co do implementacji, to ona jest najtrudniejsza, ale wystarczy dobrze przemyśleć strukturę osobnej tabeli, która odpowiada wyłącznie za uprawnienia, a sprawa się dość upraszcza.
Jeśli chodzi o uprawnienia do robienia czegoś z konkretnym elementem w jakiejś tabeli przechowującej pewne dane, swego czasu wymyśliłem tu coś takiego: mamy sobie pewną klasę, która potrafi operować elementami z tej tabeli. Zamiast narzucać jej sposób przechowywania tak, jak proponujesz, odwracamy wszystko w drugą stronę i mówimy: "trzymaj to sobie, jak chcesz, ale jeśli to ma się do czegoś przydać, to masz zaimplementować interfejs XYZ oraz pamiętać, że potrzebuję takich, a nie innych informacji". Innymi słowy, mówimy czego wymagamy od określonego typu zasobów i pozostawiamy osobie implementującej kod tej klasy na spełnienie naszych warunków. Kod systemu uprawnień będzie po prostu później odpytywać taki obiekt poprzez interfejs XYZ.
Od razu dodam, że koncepcji jeszcze nie testowałem w świecie rzeczywistym, ale jest to w moich planach.
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.