Forum: Italian Ruby user group RoR e permessi limitati su pagine

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Bd6fb06295c8ff8003af041210c91daa?d=identicon&s=25 Daneel Olivaw (daneel_olivaw)
on 2007-03-13 15:34
Buongiorno a tutti.
L'applicativo in qualche maniera sta andando avanti, come anche la mia
esperienza... o quasi, visto che mi pianto spesso.

Questa volta l'ostacolo riguarda i permessi sulle pagine. Mi spiego:
devo fare in modo che ci sia una pagina di visualizzazione di tutti i
dati inseriti visibile solo dagli utenti con il valore della colonna
"admin" impostato a "1" (0 = utente comune, 1 = amministratore). Sto
usando act_as_autenticated e come da suggerimento nella sua pagina sono
andato qui:
http://technoweenie.stikipad.com/plugins/show/User... per
vedere i dettagli di una gestione del genere. Come ormai avrete capito,
non sono riuscito a darne fuori... Ho provato a fare così: nel
controller dove compaiono i parametri della pagina in questione (nome
pagina: lista) ho scritto:

def lista
  def authorized?(user)
    @current_user.admin = "1"
  end
  altre cose
  riguardanti lista
end

Quel @current_user.admin è stato sostituito anche con user.login,
current_user.login, ho provato a verificare in base al nome (login, come
suggerito dall'esempio), ma nulla.
Ho anche messo skip_before_filter :login_required all'inizio del
controller (sotto before_filter :login_required; se lascio solo lo
"skip" va in errore)

Non ho provato gli altri sistemi (tipo "def protect?(action)") perché
non ho capito a cosa si riferissero le "action" (accesso alla pagina?
cose del genere?).

Ho frainteso qualcosa delle indicazioni delle pagine? Qualcuno sa dove
sto sbagliando?

Grazie per la pazienza ed i suggerimenti :-)
Daneel Olivaw
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2007-03-13 15:45
(Received via mailing list)
On 3/13/07, Daneel Olivaw <daneel.olivaw.r@gmail.com> wrote:
> current_user.login, ho provato a verificare in base al nome (login, come
> suggerito dall'esempio), ma nulla.


non so come la cosa sia strutturata dentro AAA, ma credo dovrebbe essere
current_user senza lo @ davanti. da lquella funzione credo vada a
pescare lo
user dalla session piuttosto che da una instance variable. just
guessing.
Bd6fb06295c8ff8003af041210c91daa?d=identicon&s=25 Daneel Olivaw (daneel_olivaw)
on 2007-03-13 16:06
Chiaro Scuro wrote:
> On 3/13/07, Daneel Olivaw <daneel.olivaw.r@gmail.com> wrote:
>> current_user.login, ho provato a verificare in base al nome (login, come
>> suggerito dall'esempio), ma nulla.
>
>
> non so come la cosa sia strutturata dentro AAA, ma credo dovrebbe essere
> current_user senza lo @ davanti. da lquella funzione credo vada a
> pescare lo
> user dalla session piuttosto che da una instance variable. just
> guessing.

Provato anche così, ma il risultato non cambia. Il bello è che non mi dà
manco un errore... non è che abbia sbagliato da qualche altra parte?
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2007-03-13 16:12
(Received via mailing list)
On 3/13/07, Daneel Olivaw <daneel.olivaw.r@gmail.com> wrote:
>
> Provato anche così, ma il risultato non cambia. Il bello è che non mi dà
> manco un errore... non è che abbia sbagliato da qualche altra parte?


current_user lo stai usando nel controller vero? credo non venga
valorizzato
dentro il model
8d4a94f890b9226726e6de7f71c4db49?d=identicon&s=25 Rob Clarke (Guest)
on 2007-03-13 17:05
(Received via mailing list)
Hai messo "include AuthenticatedSystem" nel ApplicationController?
Perché hai messo authorized dentro lista?

Hai anche scritto @current_user.admin = "1" ma hai dovuto usare ==
A67a1e59a2721f16ad958689759e58ad?d=identicon&s=25 Nicholas Wieland (Guest)
on 2007-03-14 01:57
(Received via mailing list)
Il giorno 13/mar/07, alle ore 15:34, Daneel Olivaw ha scritto:

>   def authorized?(user)
>     @current_user.admin = "1"
>   end

I metodi? ritornano sempre un booleano (a meno che chi li ha scritti
non sia violentemente ubriaco), scommetto che quell'authorized? vuole
un == e non un assegnamento.

HTH,
   ngw
Bd6fb06295c8ff8003af041210c91daa?d=identicon&s=25 Daneel Olivaw (daneel_olivaw)
on 2007-03-14 10:08
Rob Clarke wrote:
> Hai messo "include AuthenticatedSystem" nel ApplicationController?

Sì.

> Perch� hai messo authorized dentro lista?

Mi pareva il posto più logico, vedendo gli esempi fatti nella pagina di
spiegazione.
Se c'è un sistema migliore, dimmi pure.

> Hai anche scritto @current_user.admin = "1" ma hai dovuto usare ==

Provato, non cambia nulla.

Non è che "include AuthenticatedSystem" in qualche modo bypassa quelli
che scrivo dentro "lista"? Il problema però è che se aggiungo ", :except
=> [:lista]" effettivamente toglie il controllo, ma lo fa
definitivamente: tutti possono andare su quella pagina. Sto facendo
altre prove, ma ci capisco sempre meno. C'è da qualche parte un esempio
pratico più corposo di come si usano quei controlli?

Daneel Olivaw
8d4a94f890b9226726e6de7f71c4db49?d=identicon&s=25 Rob Clarke (Guest)
on 2007-03-14 16:06
(Received via mailing list)
On 14/03/07, Daneel Olivaw <daneel.olivaw.r@gmail.com> wrote:
> Rob Clarke wrote:
> > Hai messo "include AuthenticatedSystem" nel ApplicationController?
>
> Sì.
>
> > Perch� hai messo authorized dentro lista?
>
> Mi pareva il posto più logico, vedendo gli esempi fatti nella pagina di
> spiegazione.
> Se c'è un sistema migliore, dimmi pure.

Non ho visto esempi così. Dovresti fare

def authorized?(user)
  user.admin == "1"
end

def lista
  ...
end

>
> > Hai anche scritto @current_user.admin = "1" ma hai dovuto usare ==
>
> Provato, non cambia nulla.

hmm... prova a mettere un po di debug per capire se @current_user, o
current_user, o user vengono istanziate.

def authorized?(user)
  puts "@current_user = "
  p @current_user
  puts "current_user = "
  p @current_user
  puts "user = "
  p user
  user.admin == "1"
end

>
> Non è che "include AuthenticatedSystem" in qualche modo bypassa quelli
> che scrivo dentro "lista"? Il problema però è che se aggiungo ", :except
> => [:lista]" effettivamente toglie il controllo, ma lo fa
> definitivamente: tutti possono andare su quella pagina. Sto facendo
> altre prove, ma ci capisco sempre meno. C'è da qualche parte un esempio
> pratico più corposo di come si usano quei controlli?

Non dovrebbe bypassare niente. In ogni caso ti da dei errori?
Bd6fb06295c8ff8003af041210c91daa?d=identicon&s=25 Daneel Olivaw (daneel_olivaw)
on 2007-03-15 16:13
Alur, riassunto: ho capito che non ho capito nulla sul funzionamento
della gestione accessi '-_-

Per caso sapete dove possa trovare una guida (o anche un esempio) su
cosa fare, cosa scrivere e dove per fare in modo che l'utente comune
veda e compia certe azioni, mentre l'utente amministratore vede e fa
altre cose?

Sto anche sfogliando manuali, ma o ho quelli sbagliati, oppure sono
troppo generici per i miei gusti e capacità...

Ancora grazie per la pazienza e i suggerimenti.

Daneel Olivaw
D8fb06dfc08a477ecb0a76ffdbff3475?d=identicon&s=25 Chiaro Scuro (chiaroscuro)
on 2007-03-15 16:21
(Received via mailing list)
On 3/15/07, Daneel Olivaw <daneel.olivaw.r@gmail.com> wrote:

> Alur, riassunto: ho capito che non ho capito nulla sul funzionamento
> della gestione accessi '-_-


Se hai pazienza alcuni di noi stavano scrivendo un articolo proprio su
questo per therubymine.. .-)

nel frattempo quello che puoi fare nelle view puoi mettere uno switch
fatto
così..

<% if current_user.administrator? %>
...
<% else %>
....

dove administrator è il tuo campo boolean in tabella user.

questo assume che utente e amministratore vedano le stesse pagine ma in
modo
leggermente diverso.

se vuoi proteggere le pagine ti basta mettere nei metodi del controller

redirect_to :action => 'forbidden' unless current_user.administrator?

forbidden è una action + view che ti fai tu per indicare l'access denied
Fb4482bd900141ed8bd3f3fcc3723f90?d=identicon&s=25 Luca Mearelli (Guest)
on 2007-03-15 16:36
(Received via mailing list)
Daneel Olivaw wrote:
> Alur, riassunto: ho capito che non ho capito nulla sul funzionamento
> della gestione accessi '-_-
>
dunque dunque...

intanto (visto che fai rifereimento nel messaggio inziale ad AAA) direi
di separare autenticazione da autorizzazione: la prima si cura di
determinare *chi* sta accedendo ad una applicazione la seconda di
decidere *cosa* possa fare ogni soggetto.

il plugin AAA risolve *solo* il problema di autenticazione e non quello
di autorizzazione (e direi che lo fa in modo sufficientemente generico
da essere adatto alla maggioranza delle applicazioni).

> Per caso sapete dove possa trovare una guida (o anche un esempio) su
> cosa fare, cosa scrivere e dove per fare in modo che l'utente comune
> veda e compia certe azioni, mentre l'utente amministratore vede e fa
> altre cose?
hmm.... non so darti una indicazione precisa, ma credo che un manuale
che spieghi come fare l'autorizzazione non esista (nei termini in cui lo
stai cercando)....

>
> Sto anche sfogliando manuali, ma o ho quelli sbagliati, oppure sono
> troppo generici per i miei gusti e capacità...
>
perche il problema della determinazione dei ruoli e dei permessi
(chi-fa-cosa) e' parte dell'applicazione e non e' certo generalizzabile
in maniera assoluta.

La prima cosa che devi decidere e' cosa deve fare il sistema come
autenticazione (l'autorizzazione puoi risolverla con AAA)

ciao,
Luca
--

Web:   http://spazidigitali.com - http://thetyper.com
Email: mailto://l.mearelli@spazidigitali.com
Skype: callto://l.mearelli
Tel:   +39 347 7764416
A67a1e59a2721f16ad958689759e58ad?d=identicon&s=25 Nicholas Wieland (Guest)
on 2007-03-15 23:29
(Received via mailing list)
Il giorno 15/mar/07, alle ore 16:13, Daneel Olivaw ha scritto:

> Alur, riassunto: ho capito che non ho capito nulla sul funzionamento
> della gestione accessi '-_-
>
> Per caso sapete dove possa trovare una guida (o anche un esempio) su
> cosa fare, cosa scrivere e dove per fare in modo che l'utente comune
> veda e compia certe azioni, mentre l'utente amministratore vede e fa
> altre cose?

Eh, bisogna implementarlo ...
Una volta che sai riconoscere il ruolo del tuo utente e' semplice
isolarlo da cio' che non puo' fare, usa lo stesso approccio con
filtri dell'autenticazione, e' esattamente la stessa cosa ...
Una soluzione piuttosto elegante starebbe nell'usare la single table
inheritance, dove Admin < User, Staff < User ecc. ecc. in modo da
eseguire un check sul "tipo" piuttosto che su un attributo,
semplicissimo da gestire con un before_filter.

> Sto anche sfogliando manuali, ma o ho quelli sbagliati, oppure sono
> troppo generici per i miei gusti e capacità...

C'è una recipe su Rails Recipes, che spiega un approccio abbastanza
tipico.
Io, normalmente, quando qualcosa non mi entra nella testa, mi
sviluppo tutto from scratch, cosi' sono sicuro di capire.

pfao,
   ngw

--
Nicholas Wieland
n.wieland@tochunky.org
http://www.tochunky.org
B3220b2d1a7c169c9bd3d46af9e5d5ad?d=identicon&s=25 Stefano Cobianchi (Guest)
on 2007-03-16 09:50
(Received via mailing list)
On Mar 15, 2007, at 4:13 PM, Daneel Olivaw wrote:

> Alur, riassunto: ho capito che non ho capito nulla sul funzionamento
> della gestione accessi '-_-
>
> Per caso sapete dove possa trovare una guida (o anche un esempio) su
> cosa fare, cosa scrivere e dove per fare in modo che l'utente comune
> veda e compia certe azioni, mentre l'utente amministratore vede e fa
> altre cose?

Intanto una precisazione: l'autenticazione e l'autorizzazione sono due
aspetti distinti che andrebbero affrontati separatemente.
Per quanto riguarda l'autorizzazione, io trovo molto valido questo
plugin:

http://www.writertopia.com/developers/authorization

che ti permette di usare meccanismi molto flessibili (dai casi piu'
semplici a casi anche molto complessi) rimanendo agnostico riguardo
lo strato di autenticazione sottostante.
Bd6fb06295c8ff8003af041210c91daa?d=identicon&s=25 Daneel Olivaw (daneel_olivaw)
on 2007-03-16 14:35
Chiaro Scuro wrote:
> On 3/15/07, Daneel Olivaw <daneel.olivaw.r@gmail.com> wrote:
>
>> Alur, riassunto: ho capito che non ho capito nulla sul funzionamento
>> della gestione accessi '-_-
>
>
> Se hai pazienza alcuni di noi stavano scrivendo un articolo proprio su
> questo per therubymine.. .-)

Resto in attesa, allora :-)

> nel frattempo quello che puoi fare nelle view puoi mettere uno switch
> fatto
> cos�..
>
> <% if current_user.administrator? %>
> ...
> <% else %>
> ....
>
> dove administrator � il tuo campo boolean in tabella user.
>
> questo assume che utente e amministratore vedano le stesse pagine ma in
> modo
> leggermente diverso.

Come al solito le soluzioni più semplici sono le più difficili da
trovare. Per ora questo sistema va più che bene, grazie. Lo applico e
intanto mi studio il resto.

Per autenticazione ed autorizzazione, cambia decisamente molto sapere
che sono gestite separatamente, specialmente se si è abituati a sistemi
che gestiscono le due cose in apparenza senza far distinzioni.

Alla prossima.

Daneel Olivaw
This topic is locked and can not be replied to.