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.
on 2012-09-25 10:22
on 2012-09-25 13:53
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
app/controllers/users_controller.rb
class UsersController < ApplicationController
before_filter :require_user, :only => [..., :change_language]
load_and_authorize_resource
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 Msan 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.
on 2012-09-25 15:32
2012/9/25 Paolo Montrasio <paolo@paolomontrasio.com>: > user ||= User.new > 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?
on 2012-09-25 17:39
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. Paolo Msan Msan wrote in post #1077464: > 2012/9/25 Paolo Montrasio <paolo@paolomontrasio.com>: >> user ||= User.new >> 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?
on 2012-09-25 18:22
2012/9/25 Paolo Montrasio <paolo@paolomontrasio.com>: > 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?
on 2012-09-25 19:40
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. https://github.com/ryanb/cancan/issues/138 Mi sa che dovrai metterli a mano o farti uno script in Ruby per aggiungere la riga :-) Paolo Msan Msan wrote in post #1077494: > 2012/9/25 Paolo Montrasio <paolo@paolomontrasio.com>: >> 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?
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.