Abilitazioni e logica applicativa

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?