Ciao a tutti,
ho un dilemma che mi piacerebbe condividere.
Si tratta di un progetto rails 3.2 che utilizza cancan per gestire le
autorizzazioni.
Sto modificando il metodo “changeable?” del modello che restituisce true
o false ed indica se è possibile modificare o distruggere un record.
def changeable?
res = true
if self.worked?
if (self.changes.keys & [‘state’, ‘ecc’]).empty? &&
User.current_user.role?(:chief)
# Ok se non sono stati variati gli attributi sopra
elsif User.current_user.admin?
# Ok
else
errors.add(:state, “operazione non consentita in questo stato!”)
res = false
end
end
Altra roba
res
end
Il metodo sopra e’ utilizzato da una call back before_save e
nell’ability:
if user.role? :user
…
can [:update, :destroy], Model do |model|
… && model.changeable?
end
end
Ora devo gestire un’eccezione su un profilo di cancan che non riesco ad
inserire nell’ability in quanto si deve combinare ad altra logica
applicativa e che quindi dovrei inserire nel metodo “changeable?”.
Non mi piace inserire regole che dovrebbero stare nelle abilitazioni.
Forse c’e’ un approccio a monte migliore per evitare questa situazione,
voi come fareste?