Poni più di una condizione da soddisfare, provo a fare ordine:
tabelle categorie e sottocategorie: gli utenti le vedono sempre tutte e qualcuna sarà vuota o gestisci i permessi anche su queste?
tabella prodotti: gestisci i permessi anche a questo livello o “comandano” solo le categorie?
prodotti personalizzati o con prezzi personalizzati: come vuoi gestirli?
io faccio una proposta, basata solo sui prodotti:
inserisci un campo “livello”, da valorizzare con un intero
fai una tabella con i livelli (codice, descrizione). Il codice è un intero (0 visitatore, 1000 admin, gli altri livello li valorizzi con i valori intermedi)
ad ogni utente assegni un livello preso dalla tabella
quando fai le query per mostrare i prodotti che un utente può vedere prendi tutti quelli che hanno un livello minore o uguale a quello assegnato all’utente
per i prodotti personalizzati, fai una tabella di collegamento dove metti idProdotto, idUtente e i campi che eventualmente vuoi personalizzare per lui (con una query o un pezzo di codice dovresti riuscire ad unire il resultset dei prodotti personalizzati con quelli della tabella generica)
Vedi se ti piace