Использование рельсов 3.2. Я пытаюсь защитить свое приложение, проверяя разрешение пользователя на все crud-действия. Вот один из примеров:Обтекание внутри фильтра
class StatesController < ApplicationController
def create
@country = Country.find(params[:country_id])
if can_edit(@country)
@state.save
else
redirect_to country_path
end
end
def destroy
@country = Country.find(params[:country_id])
if can_edit(@country)
@state = State.find(params[:id])
@state.destroy
else
redirect_to country_path
end
end
end
class ApplicationController < ActionController::Base
def is_owner?(object)
current_user == object.user
end
def can_edit?(object)
if logged_in?
is_owner?(object) || current_user.admin?
end
end
end
Я заметил, что я был оберточной can_edit?
во многих контроллерах. Есть ли способ DRYER для этого?
Примечание: Все должны включать объект, чтобы проверить, является ли зарегистрированный пользователь владельцем.
I сначала использовал CanCan, но обнаружил, что я не могу легко настроить перенаправление ошибок, это не так гибко. Поэтому я решил работать над ним вручную. – Victor
Используйте метод Rails rescue_from для этого: http://api.rubyonrails.org/ классы/ActiveSupport/Rescuable/ClassMethods.html – Chris