Salve.
Non vorrei sbagliare ma le abilities di cancan controllano solo le 7
canoniche actions? Cioe’ new, show, create, ecc.?
Se volessi usarle per delle actions definite nei controllers di una
gem e se in questi controller ci fossero delle custom actions come si
puo’ fare?
Non posso di certo andare a spulciare ogni controller per capire quali
action vengono utilizzate per poterle inserire nelle abilities.
Non posso dirmi un grande esperto di CanCan ma visto che non ha ancora
risposto nessuno ecco cosa ho trovato in un progetto a cui sto
lavorando, impostato da altri prima di me.
app/models/ability
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
…
can :change_language, User
…
end
end
def change_language
# codice che cambia la lingua dell’utente @user
# è chiamato con GET cliccando la bandierina nel menu lingue
end
end
Quindi mi viene da dire che non serve nulla di particolare, basta
chiamare il metodo can dentro l’initialize di Ability dandogli come
argomento nome del metodo del controller e classe.
Paolo
Msan M. wrote in post #1077418:
Salve.
Non vorrei sbagliare ma le abilities di cancan controllano solo le 7
canoniche actions? Cioe’ new, show, create, ecc.?
Se volessi usarle per delle actions definite nei controllers di una
gem e se in questi controller ci fossero delle custom actions come si
puo’ fare?
Non posso di certo andare a spulciare ogni controller per capire quali
action vengono utilizzate per poterle inserire nelle abilities.
before_filter :require_user, :only => […, :change_language]
chiamare il metodo can dentro l’initialize di Ability dandogli come
argomento nome del metodo del controller e classe.
Appunto quindi devo spulciare i controller utilizzati nella gem e
indicare nelle abilities i metodi per i quali deve intervenire cancan?
S, soprattutto se blocchi tutto per default (che quello che
consiglio) con
class ApplicationController < ActionController::Base
check_authorization
end
Te lo consiglio sia come misura di sicurezza sia per accorgerti se stai
lasciando indietro qualcosa.
Infatti e’ quello che ho fatto.
Ovviamente e’ sconsigliabile andare a modificare il codice di una gem
per poter inserire in ogni controller load_and_authorize_resource.
Come potrei fare allora?
before_filter :require_user, :only => […, :change_language]
chiamare il metodo can dentro l’initialize di Ability dandogli come
argomento nome del metodo del controller e classe.
Appunto quindi devo spulciare i controller utilizzati nella gem e
indicare nelle abilities i metodi per i quali deve intervenire cancan?
Nel progetto su cui sto lavorando non tutti i controller hanno bisogno
del load_and_authorize_resource. Alcuni hanno solo l’authorize_resource
altri non hanno nulla.
Ho googlato uno che l’aveva messo in ApplicationController ma aveva
avuto un problema con devise (2 anni fa) e gli hanno anche risposto che
non è l’approccio consigliato.
Mi sa che dovrai metterli a mano o farti uno script in Ruby per
aggiungere la riga
S, soprattutto se blocchi tutto per default (che quello che
consiglio) con
class ApplicationController < ActionController::Base
check_authorization
end
Te lo consiglio sia come misura di sicurezza sia per accorgerti se stai
lasciando indietro qualcosa.
Infatti e’ quello che ho fatto.
Ovviamente e’ sconsigliabile andare a modificare il codice di una gem
per poter inserire in ogni controller load_and_authorize_resource.
Come potrei fare allora?
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.