Sto lavorando su un pseudoframework di gestione degli utenti in PHP, e sto cercando di implementare un'autorizzazione basata su regole ben definite. Sto usando una combinazione di funzioni SQL e condition-checking scritte in PHP in questo momento, ma non sono completamente soddisfatto. Funziona, ma non è molto elegante e soffre di alcune limitazioni.
Prolog è completo per Turing, quindi mi viene in mente che qualsiasi regola di autorizzazione arbitraria potrebbe essere implementata in questo modo. Ad esempio:
in_group("Alice","admin").
in_group("Alice","user").
in_group("Bob","user").
in_group("Carlos","admin").
in_group("Carlos","user").
allowed("delete_user",X,Y):- in_group(X,"admin"),
not(in_group(Y,"admin")).
In pratica dice "Permetti all'utente X di cancellare l'utente Y se X è un amministratore e Y non lo è."
Le mie domande sono fondamentalmente:
- I problemi di scalabilità emergono ancora nelle moderne implementazioni di Prolog?
- In che modo questi problemi potrebbero essere complicati dal modo in cui le persone utilizzano in genere le applicazioni Web?
- Quali sono i rischi di compromettere la sicurezza a causa delle "conseguenze indesiderate" di alcuni costrutti Prolog?
- Quanto sarà difficile farlo per le persone prive del background di Prolog per modificare le regole di autorizzazione? L'esempio sopra mi sembra semplice, ma cosa succede se ci sono migliaia di regole?
Se Prolog non è la migliore idea per questa situazione, ci sono altri linguaggi di programmazione logica che potrebbero essere più adatti?
Ho letto questo post: Perché non vengono scritti i motori di regole Prolog? , ma quella domanda sembra riguardare i motori delle regole in generale, non le regole di autorizzazione in particolare.