В Rails, где я могу остановить доступ к New, Update и т. Д., Если пользователь не вошел в систему? - PullRequest
0 голосов
/ 20 августа 2010

У меня есть представление для ввода / редактирования сообщений.

Я хочу запретить людям создавать или редактировать сообщения, если они не вошли (в модели), и я хочу перенаправить ./сообщения / новый просмотр списка сообщений с сообщением «Вы не можете создавать новые сообщения, если вы не вошли в систему».

Я попытался изменить команду «new» в контроллере сообщений следующим образом:

  def new

    if !session[:user] 
      redirect_to(@posts, :notice => 'You cannot create a post unless you are logged in.')
      return
    end

    @post = Post.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @post }
    end
  end

но это не работает.

Я не знаю, должен ли я поместить логику того, что я хочу сделать, в контроллер, в представление или в модель.(Или какая-то комбинация из всех 3).

Я предполагаю, что я должен положить его только в одно место (СУХОЙ и т. Д.), Но я не знаю, где.

Ответы [ 4 ]

2 голосов
/ 20 августа 2010

Попробуйте использовать before_filter :verify_authenticated.Ознакомьтесь с документацией по API: http://api.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html. Второй пример - именно то, что вы ищете.Ваша проверка подлинности может войти в ваш ApplicationController, так что вы получите его в одном месте.

Или посмотрите «более симпатичные» заметки из руководства: http://guides.rubyonrails.org/action_controller_overview.html#after-filters-and-around-filters

1 голос
/ 20 августа 2010

[Отказ от ответственности: из вашего вопроса было не ясно, на каком уровне знания рельсов вы находитесь]

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

Он делает все, что вам нужно, не нужно накатывать собственную аутентификацию. Но если вы действительно хотите сделать это сами, взгляните на это введение . Оно очень старое, но в большинстве своем оно сохранилось.

Но я бы определенно посоветовал использовать существующий, проверенный и протестированный плагин, такой как devise (но others определенно существует).

1 голос
/ 20 августа 2010

Авторизация пользователя обычно выполняется в контроллере, более конкретно, с использованием фильтра before. Например:

class SomeController
  before_filter :authorize

  # the rest of your controller

  private
  def authorize
    # authorization code
  end
end

Теперь код авторизации действительно зависит от того, какой гем / плагин вы используете (или если вы внедрили свою собственную пользовательскую систему).

0 голосов
/ 20 августа 2010

Некоторая декларативная авторизация - например, CanCan лучше всего подходит здесь:

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

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