Sto creando una nuovissima applicazione Housing che consente all'utente di valutare o preferire le case. Di seguito sono riportati gli utenti dell'applicazione:
-
proprietario
-
Agente
-
Ospite (non connesso)
-
Visitatore (loggato)
-
Tenant
Ora, Owner può eseguire CRUD operazioni, ma solo per la casa che possiede e non può valutare il House che possiede. Il Tenant ad esempio può R qualsiasi casa e può only valutare la casa che ha noleggiato.
Quindi, vedo lo schema qui; la prima è l'operazione CRUD che è roba di basso livello e alla fine qualsiasi logica di business si riduce a questa, la seconda è la logica di business stessa così, per esempio c'è una richiesta di rimuovere la casa da un utente e la richiesta è gestita da il seguente controller:
// controller
function remove(req, res) {
const { userId, houseId } = req.body;
houseService.remove(userId, houseId);
...
}
// service
function add(userId, houseId) {
const user = getUser(userId)
if (user.hasRole(Roles.OWNER)) {
// check if the houseId is one of the houses owned by the owner
...
} else {
throw AuthrorizationError();
}
}
Sono un po 'confuso dai ruoli e dalla logica di business.
Domande:
- Il controllo dei permessi dovrebbe entrare in servizio o nel controller?
- Nell'esempio sopra sto verificando l'autorizzazione prima di eseguire qualsiasi logica di business, è corretto?
- La valutazione di una casa dovrebbe creare una nuova voce nella classifica
association, dovrei aver esposto la classificazione come regola di autorizzazione agli utenti nel sistema i.e.CRUDoperazione per ogni tipo di utente?
Aggiornamento:
Per essere più chiari su ratings posso avere le seguenti regole di permesso:
Tenant
Casa - sola lettura
Valutazione - Sì
proprietario
House - CRUD
Valutazione - Sì
Ma in qualche modo mi sta mettendo a disagio, dovrei nascondere le informazioni relative ai rating in profondità sotto la mia logica aziendale e non esporle a ruoli e permessi?