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.CRUD
operazione 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?