Dynamiczne menu z bazy danych z ograniczeniem dostepu

0

Mam uzytkownikow w bazie danych i maja oni ogolny dostep level_access od 1 wzwyz powiedzmy do 5
W tabelce menu mam kategorie oraz poziom dostepu czyli jesli uzytkownik ma poziom 3 to wybierze wszystko z
tabelki menu gdzie poziom jest <= 3 wiec teoretycznie jest cacy.

Chodzi mi teraz o to ze uzytkownik moze miec np dostep do jednej kategori do ktorej maja dostep wszyscy z poziomu 5
W tablece uzytkownika mam pole np: zamowienia ktore jest boolean. i powiedzmy ze jest na 1 ustawione

Czyli chcialbym by z menu wyjac wszystkie wiersze gdzie poziom dostepu jest <= 3 ale jesli uzytkownik na zamowienia = 1 to zeby to tez
wyjac z tej kategori menu.

To jak to zrobic w zapytanie sql ? czy mam budowac zapytanie sql dynamicznie czyli sprawdzic do jakiej kategori user ma dostep i dodac do sql kolejny warunek WHERE ?

0

Twoje rozwiązanie jest kijowe, a zapytanie będzie wyglądało mniej więcej tak:

SELECT m.id
FROM User u
INNER JOIN Menu m ON m.level_access <= u.level_access OR (m.name = 'zamowienia' AND u.zamowienia = 1);

Znacznie lepszym rozwiązaniem wydaje mi się stworzenie tabeli UserMenus i dodawanie do niej menu do których użytkownik ma dostęp poza tymi z level_access, zapytanie wyglądałoby wtedy tak:

SELECT m.id
FROM User u
INNER JOIN UserMenu um ON um.user_id = u.id
INNER JOIN Menu m ON m.level_access <= u.level_access OR um.menu_id = m.id;

1 użytkowników online, w tym zalogowanych: 0, gości: 1