Passaggio di variabili

Ciao a tutti,mi sono avvicinato da poco a ruby on rails,e infatti sono
tante le cose che non riesco a fare da solo!!!
Ad esempio,non riesco a fare in modo che a seconda del tipo di utente
vengano visualizzate o meno alcune azioni permesse all’utente
stesso:vorrei che un utente “admin” abbia accesso a tutte le azioni,gli
altri (che sono di tipo “user”) solo alle azioni di lettura.L’unico modo
in cui riesco a fare questo è controllare il tipo di utente dalla vista:
-file:list.rhtml

<%= if session[:admin]==true
 link_to(image_tag( 'edit.png', :alt => 'edit', :class =>

‘noborder’), :action => ‘edit’, :id => state)
end %>
<%= if session[:admin]==true
link_to(image_tag( ‘delete.png’, :alt => ‘destroy’, :class =>
‘noborder’), { :action => ‘destroy’, :id => state }, :confirm => ‘Are
you sure?’, :method => :post)
end%>

Come devo fare per eseguire questo controllo dal controller e
visualizzare le azioni di modifica e cancellazione se l’utente è
“admin”?

Ti sconsiglio di inserire il controllo nella sessione in quanto potrebbe
essere cancellata o manomessa, invece potresti creare una colonna nel
database nella tabella user in qui salvi il tipo di utente.

Il controllo in questo caso devi farlo comunque nella vista, non avrebbe
senso farlo nel controller. puoi però creare un helper apposta, qualcosa
del tipo:

def admin?
current_user.role == ‘admin’
end

e nelle viste usare

if admin? then … end

Spero hai capito all’incirca il ragionamento

Oscar Del ben wrote:

Ti sconsiglio di inserire il controllo nella sessione in quanto potrebbe
essere cancellata o manomessa, invece potresti creare una colonna nel
database nella tabella user in qui salvi il tipo di utente.

Il controllo in questo caso devi farlo comunque nella vista, non avrebbe
senso farlo nel controller. puoi però creare un helper apposta, qualcosa
del tipo:

def admin?
current_user.role == ‘admin’
end

e nelle viste usare

if admin? then … end

Spero hai capito all’incirca il ragionamento

Più o meno…cerco di spiegarti un pò la mia situazione: ho conosciuto
RoR grazie ad un corso che è stato attivato nella mia università . Tra le
varie cose che il prof ha spiegato,c’è anche il fatto che conviene
rispettare il paradigma MVC: quindi i controlli vanno fatti nel
controller,mentre l’unica cosa che la vista dovrebbe fare è quella di
visualizzare i dati.
Avevo pensato a qualcosa del genere:
in list.rhtml:
<%= @privileges_for_edit %>
nel controller:

def list

if session[:admin]==true
@privileges_for_edit= link_to(image_tag(…))
else
@privileges_for_edit= “”

end

solo che l’errore che mi riporta è “undefined method image_tag…”
Come mai?
Grazie per la vostra tempestività !!!

David wrote:

Sono d’accordo con te: queste robe vanno spostate il pi� possibile nel
controller. Di solito li metto in app/controllers/application.rb sotto
forma di before_filter.

Ti consiglio di dare un’occhiata al plugin “restful_authentication” per
un esempio semplice e facile da seguire/estendere.

Per implementare view con parti riservati agli admin (o altri ruoli)
penso che la soluzione pi� pulita consiste in una UI separata, con il codice
in app/views/admin/ e app/controllers/admin/. Se proprio non riesci a
staccare la funzionalit� (o se non vale la pena perch� � utile solo in
alcune schermate) puoi almeno provare a separare la roba ‘pericolosa’ in
un partial a s�. Se nemmeno questo � possibile puoi rendere il codice un po’
pi� leggibile usando cose tipo “link_to_if”, di modo di avere:

<%= link_to_if admin? image_tag( ‘edit.png’, :alt => ‘edit’, :class =>
‘noborder’), :action => ‘edit’, :id => state %>

Con link_to_if funziona,ma solo a metà :vengono visualizzate le azioni di
modifica e cancellazione,ma non sono cliccabili! Invece vorrei che
vengano visualizzate solo le azioni permesse…

Sono d’accordo con te: queste robe vanno spostate il più possibile nel
controller. Di solito li metto in app/controllers/application.rb sotto
forma di before_filter.

Ti consiglio di dare un’occhiata al plugin “restful_authentication” per
un esempio semplice e facile da seguire/estendere.

Per implementare view con parti riservati agli admin (o altri ruoli)
penso che la soluzione più pulita consiste in una UI separata, con il codice
in app/views/admin/ e app/controllers/admin/. Se proprio non riesci a
staccare la funzionalità (o se non vale la pena perché è utile solo in
alcune schermate) puoi almeno provare a separare la roba ‘pericolosa’ in
un partial a sé. Se nemmeno questo è possibile puoi rendere il codice un po’
più leggibile usando cose tipo “link_to_if”, di modo di avere:

<%= link_to_if admin? image_tag( ‘edit.png’, :alt => ‘edit’, :class =>
‘noborder’), :action => ‘edit’, :id => state %>

non sono perchè quella è una cosa strettamente di design che deve essere
controllata dagli helper, non la metterei mai in un controller IMHO.

Oscar Del ben wrote:

non sono perchè quella è una cosa strettamente di design che deve essere
controllata dagli helper, non la metterei mai in un controller IMHO.

  • non sono daccordo

Comunque sia alla fine sono riuscito: faccio visualizzare solo le azioni
permesse,però riesco a farlo solo inizializzando una variabile di
sessione: se l’utente loggato è admin,setto:
session[:admin]=true
altrimenti session[:admin] resta settato a nil.
Poi nel controller utilizzo
verify :session => admin==true (o qualcosa del genere,nn ricordo se il
codice è corretto!!!)
infine nella vista faccio il controllo:
if session[:admin] link_to(…)
Ora invece ho un altro problema,credo che comincierò un nuovo
topic.Grazie a tutti x l’aiuto!!!

On Dec 27, 2007 2:55 PM, Alessandro M. [email protected]
wrote:

Più o meno…cerco di spiegarti un pò la mia situazione: ho conosciuto
RoR grazie ad un corso che è stato attivato nella mia università. Tra le

Che università? Come si chiama il prof? Sono curioso, e poi mi pare
giusto
reclamizzare le università che offrono corsi su argomenti utili e
correnti… :slight_smile:

M

Matteo V. wrote:

On Dec 27, 2007 2:55 PM, Alessandro M. [email protected]
wrote:

Pi� o meno…cerco di spiegarti un p� la mia situazione: ho conosciuto
RoR grazie ad un corso che � stato attivato nella mia universit�. Tra le

Che universit�? Come si chiama il prof? Sono curioso, e poi mi pare
giusto
reclamizzare le universit� che offrono corsi su argomenti utili e
correnti… :slight_smile:

M

Università di Pescara, corso di laurea spec. in economia
informatica. Il corso si chiama tecnologie per lo sviluppo di
applicazioni internet ed è tenuto dal professor Fioravanti.Il corso è
stato attivato quest’anno,si è trattato ruby on rails: un
pò difficile,ma se ci si prende un pò la mano permette di creare
applicazioni davvero velocemente!
Per sostenere l’esame,devo realizzare un progetto da presentare al
professore,ecco perchè spesso vi chiedo consigli e suggerimenti!
Ringrazio tutti quanti per il prezioso aiuto. Bye!!!

Piero B. wrote:

Mi ricorda un mitico corso della facolt� di Informatica di Varese :slight_smile:

Il corso �
stato attivato quest’anno,si � trattato ruby on rails: un
p� difficile,ma se ci si prende un p� la mano permette di creare
applicazioni davvero velocemente!
Sai qual’� la difficolt� pi� grossa? Rails ti rende difficile fare le
cose male,
come scrivere codice dove non andrebbe scritto o in posti non adatti.

Forse è per questo che trovo molte difficoltà :stuck_out_tongue:

Università di Pescara, corso di laurea spec. in economia
informatica. Il corso si chiama tecnologie per lo sviluppo di
applicazioni internet ed è tenuto dal professor Fioravanti.Il corso è
stato attivato quest’anno,si è trattato ruby on rails: un
pò difficile,ma se ci si prende un pò la mano permette di creare
applicazioni davvero velocemente!
Per sostenere l’esame,devo realizzare un progetto da presentare al
professore,ecco perchè spesso vi chiedo consigli e suggerimenti!
Ringrazio tutti quanti per il prezioso aiuto. Bye!!!

Scusa, ma difficile rispetto a cosa?

Mi ricorda un mitico corso della facoltà di Informatica di Varese :slight_smile:

Il corso è
stato attivato quest’anno,si è trattato ruby on rails: un
pò difficile,ma se ci si prende un pò la mano permette di creare
applicazioni davvero velocemente!
Sai qual’è la difficoltà più grossa? Rails ti rende difficile fare le
cose male,
come scrivere codice dove non andrebbe scritto o in posti non adatti.

Oscar Del ben wrote:

Università di Pescara, corso di laurea spec. in economia
informatica. Il corso si chiama tecnologie per lo sviluppo di
applicazioni internet ed è tenuto dal professor Fioravanti.Il corso è
stato attivato quest’anno,si è trattato ruby on rails: un
pò difficile,ma se ci si prende un pò la mano permette di creare
applicazioni davvero velocemente!
Per sostenere l’esame,devo realizzare un progetto da presentare al
professore,ecco perchè spesso vi chiedo consigli e suggerimenti!
Ringrazio tutti quanti per il prezioso aiuto. Bye!!!

Scusa, ma difficile rispetto a cosa?

rispetto ad altri linguaggi,come ad es php

In php è facile iniziare a scrivere una paginetta, ma se vuoi
realizzare un’applicazione completa e coerente, trovo che sia più
facile usare Rails. Direi che Rails è più difficile perché c’è di più
da imparare; ma scrivere una buona applicazione è più facile in Rails.

M