Как ограничить доступ пользователя к странице в RoR? - PullRequest
2 голосов
/ 23 января 2010

Я знаю, что у меня может быть сеанс после входа пользователя. Кроме того, я создал вспомогательный метод с именем "current_user". Я не хочу, чтобы другие люди, которые не вошли в систему, могли получить доступ к странице. Как сделать, кроме как сделать это?

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

<% if current_user%>
My Content
<% end %>

Ответы [ 3 ]

7 голосов
/ 23 января 2010

Создайте before_filter, который проверяет, установлена ​​ли переменная current_user, и перенаправляет пользователя в другое место (root, страницу регистрации, что-то), если это не так. Примерно так:

class ApplicationController < ActionController::Base
  def login_required
    redirect_to('/') if current_user.blank?
  end
end

class MyController < ApplicationController
  before_filter :login_required, :only => :action_aviable_only_for_logged_in

  def action_aviable_only_for_logged_in
    ...
  end
end
1 голос
/ 23 января 2010

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

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

В ответ на ваш вопрос проверка ограничения доступа должна выполняться в контроллере с помощью before_filter и проверки того, какое действие они собираются выполнить. (Метод filter передается экземпляру контроллера и, следовательно, ему предоставляется доступ ко всем аспектам контроллера, и он может манипулировать ими по своему усмотрению)

Однако, используя плагин, который я упомянул выше, это будет так же просто, как

before_filter :require_user, :except => [:list]

это потребует входа в систему для всех действий в контроллере, кроме действия со списком

0 голосов
/ 23 января 2010

Я думаю, что before_filter - это путь, если контроль доступа - это единственная проблема, с которой приходится иметь дело. Я не думаю, что authlogic действительно поможет вам там. Но есть и другие драгоценности контроля доступа, такие как cancan от Райана Бейтса, которые кажутся легкими и довольно простыми в использовании. Тогда есть декларативное разрешение . Однако, если у вас большое приложение, я думаю, что before_filters даст вам больший контроль. У вас могут быть отдельные модули, которые обеспечивают контроль доступа для каждой утилиты.

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