Gli amministratori devono poter gestire in toto i dati
dell’applicazione, un CRUD completo.
In fase di amministrazione ho un determinato layout.
La stessa applicazione deve mostrare una lista dei prodotti e in
questo caso devo usare un layout ad hoc, i prodotti possono solo
essere visualizzati.
In pratica i controller e le action sono le stesse per ambedue le
situazioni, cambiano i layout e devo impedire la possibilita’ di
creare o modificare i prodotti se in fase di visualizzazion.
In questi casi e’ meglio utilizzare gli stessi controller e views
inserendo dei controlli per impedire l’uso delle action/views create,
update, ecc.
o sarebbe meglio creare direttamente dei controller/views specifici?
Gli amministratori devono poter gestire in toto i dati
dell’applicazione, un CRUD completo.
In fase di amministrazione ho un determinato layout.
La stessa applicazione deve mostrare una lista dei prodotti e in
questo caso devo usare un layout ad hoc, i prodotti possono solo
essere visualizzati.
Scusate tutti, mi butto
E’ possibile dividere i layout tra fase di amministrazione e fase di
visualizzazione? Perch se la amministrazione la metti sotto un uri del
tipo ‘http://ilmiosito.it/amministrazione’ hai gi risolto in fase di
routing, visualizzi layout diversi.
Altrimenti ci sono un bel po’ di plugin ed helper gi pronti che ti
possono
aiutare in questo, per in questo caso lascio la parola ai pi esperti,
sono ancora troppo poco bravo.
Gli amministratori devono poter gestire in toto i dati
dell’applicazione, un CRUD completo.
In fase di amministrazione ho un determinato layout.
La stessa applicazione deve mostrare una lista dei prodotti e in
questo caso devo usare un layout ad hoc, i prodotti possono solo
essere visualizzati.
Si ok, visualizzare layout diversi in base al path, al controller,
ecc. non e’ un problema.
Mi chiedevo invece se fosse il caso di utilizzare gli stessi
controller/actions/views per entrambe le situazioni inserendo dei
controlli per inibire alcune actions se si e’ in fase di
visualizzazione oppure se sia meglio creare direttamente dei
controller/actions/views appositi per la parte dedicata alla sola
visualizzazione.
In pratica i controller e le action sono le stesse per ambedue le
situazioni, cambiano i layout e devo impedire la possibilita’ di
creare o modificare i prodotti se in fase di visualizzazion.
Ciao,
ma solo questione di layout? Cio, ci sono i layout di
visualizzazione che non mi mostrano i link, ma io vado lo stesso alle
action giuste, che succede? Riesco a modificare le cose?
Cosa distingue la fase di amministrazione dalla fase di visualizzazione?
perch non sfruttare l’ereditariet? Da un controller di base erediti
due controller, specializzandoli per i diversi contesti in cui gli
utenti devono lavorare.
creare o modificare i prodotti se in fase di visualizzazion.
In questi casi e’ meglio utilizzare gli stessi controller e views
inserendo dei controlli per impedire l’uso delle action/views create,
update, ecc.
o sarebbe meglio creare direttamente dei controller/views specifici?
Cosa distingue la fase di amministrazione dalla fase di visualizzazione?
Che a parte il layout la fase di amministrazione e’, appunto di
amministrazione, cioe’ viene chiesta una user e password e gli admin
possono creare, modificare, cancellare e ovviamente anche visualizzare
i prodotti.
La fase di visualizzazione invece non prevede un login e gli utenti
via internet possono solo visualizzare la lista dei prodotti e i
relativi dettagli oltre a poter fare delle ricerche, non devono in
alcun modo poter intervenire sui dati.
se vai qui: Layouts and Rendering in Rails — Ruby on Rails Guides,
2.2.12.3 Conditional Layouts, puoi vedere come caricare layout
differenti in base alla action. Per quanto riguarda filtrare le action
in base all’utente, se admin oppure no, puoi usare un semplice before
filter:
before_filter :require_admin, :only => [:create]
private
def require_admin
redirect_to '/' unless admin?
end
CanCan ti permette di dare i permessi in modo piu` granulare, ma per
quello che vuoi far te ti basta un admin? nel model user.
quindi non un admin, quindi con un layout dedicato alla
%th= t’ quantity’
scusa e se questi dettagli aggiuntivi li metti in una partial view e li
dentro metti il controllo se l’user admin o meno, nel template
principale
ti rimane solo la chiamata per il redering della partial
oppure fai il controllo nella view principale e fai due partial diverse
a
seconda che l’utente sia o meno admin
def require_admin
redirect_to ‘/’ unless admin?
end
CanCan ti permette di dare i permessi in modo piu` granulare, ma per
quello che vuoi far te ti basta un admin? nel model user.
Si e’ vero posso fare un controllo in base ai ruoli.
Pero’ mi trovo nella situazione in cui o dupplico il codice usando un
controller apposito oppure riempio le views di if.
Esempio molto semplice:
Nella index di product ho:
%table
%thead
%tr
%th= t “name”.titleize
%th= t ‘category’.titleize
%th= t ‘price’.titleize
%th
%th
%th
%tbody
= render @companies
Ora supponiamo che nella visualizzazione di questa tabella volessi
avere maggiori dettagli se viene richiamata da un utente qualsiasi,
quindi non un admin, quindi con un layout dedicato alla
visualizzazione dei prodotti su internet.
Dovrei fare qualcosa del genere:
%table
%thead
%tr
%th= t “name”.titleize
%th= t ‘category’.titleize
%th= t ‘price’.titleize
- if !user_signed_in?
%th= t’ quantity’
%th= ‘…’
%th
%th
%th
%tbody
= render @companies
Dovrei quindi riempire di controlli del genere tutte le view se le
devo personalizzare in base alla situazione.
A questo punto penso sia meglio fare un controller/view apposito, o no?
Dovrei quindi riempire di controlli del genere tutte le view se le
devo personalizzare in base alla situazione.
A questo punto penso sia meglio fare un controller/view apposito, o no?
Ciao,
a questo punto solo questione di gusti/comodit: alcuni preferiscono
tenere completamente separati sito pubblico e backoffice, anche con
stili totalmente differenti; altri apprezzano di pi che gli admin
abbiano lo stesso sito ma “arricchito”.
Gusti a parte, per, la prima opzione in genere pi semplice da
realizzare, sia perch si hanno meno controlli (fai un
Admin::BaseController che filtra gli utenti e poi tutti gli altri
controller admin discendono da quello, e cos niente pi if
dappertutto), sia perch cos non devi preoccuparti che il layout stia
bene sia con i controlli aggiuntivi che senza.
Sì, come soluzione rimane pulità, devi solo fare attenzione che l’utente
abbia un valore di default e che il template esista anche se non
aggiunge niente alla vista.
S, come soluzione rimane pulit, devi solo fare attenzione che l’utente
abbia un valore di default e che il template esista anche se non
aggiunge niente alla vista.
Luigi
Si, infatti, bisogna avere queste attenzioni, eventualmente, forse,
meglio dividere le partial in cartelle per profilo utente, aggiungerne
uno
diventa semplicemente copiare una directory e personalizzare le view,
ma
veramente una bischerata, come si dice da noi
Puoi benissimo intercettare dentro la chiamata role e verificare li se
c’
un valore valido e decidere cosa fare di conseguenza. Se uno non fa il
login poi puoi prevedere un utente di default.
S, come soluzione rimane pulit, devi solo fare attenzione che l’utente
abbia un valore di default e che il template esista anche se non
aggiunge niente alla vista.
Se l’utente non ha un valore di default, nel senso che per la sola
visualizzazione non faccio login (uso devise con ldap), devo per forza
controllare…if…se esiste una sessione utente oppure no per
visualizzare un partial piuttosto che un altro.