Как уже говорили другие, before_filter здесь кажется правильным инструментом. Но я рассмотрю тот факт, о котором вы спрашивали.
К сожалению, метод не может привести к возвращению вызывающего метода. Два ближайших совпадения с шаблоном, который вы ищете:
Блок:
def require_rights(rights)
if session[rights]
yield
else
flash[:notice] = "You don't have the rights to do #{:action}."
redirect_to :action=>:index
end
end
Итак, с этим вы бы сделали:
def action_which_requires_rights
require_rights :admin do
#do whatever here
end
end
Или возвращаемое значение:
def require_rights(rights)
return true if session[rights]
flash[:notice] = "You don't have the rights to do #{:action}."
redirect_to :action=>:index
false
end
Итак, с этим вы бы сделали:
def action_which_requires_rights
require_rights :admin or return
#do whatever here
end
Мне больше нравится блок, потому что он подходит подобными методами, и заставление вызывающего абонента делать это or return
кажется мне неестественным.