Ruby on Rails 2.3.8: есть ли способ заставить действие уничтожения для каждого контроллера происходить только при соблюдении условия? - PullRequest
1 голос
/ 13 июля 2011

В настоящее время в моем приложении я обнаружил, что если вы перехватываете пакет для выполнения команды удаления, вы можете изменить идентификатор на любой идентификатор, и этот объект будет удален, независимо от того, принадлежит ли он человеку, который сделал это или нет.

Итак, мой вопрос, есть ли способ как-то глобально изменить способ уничтожения / удаления, чтобы current_user должен был владеть элементом, подлежащим удалению (или любым другим условием, так как многие приложения немного сложнее простого владения пользователем)

1 Ответ

1 голос
/ 13 июля 2011

Не стоит писать глобальное правило для действия уничтожения.Простейшим способом вам просто нужно проверить доступ в ваших контроллерах:

class MyController < ApplicationController
  before_filter :access, :only => [:edit, :update, :destroy]

  ...

  private
  def access
    my_object = MyObject.find(params[:id])
    unless logged_in? && my_object.user == current_user
      render :template => "/error/401.html.erb", :status => 401
    end
  end
end

Также вам стоит взглянуть на CanCan gem

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...