Можно ли определить и проверить возможность входа в систему с помощью устройства? - PullRequest
1 голос
/ 13 июля 2011

Можно ли определить cancan для анонимных пользователей в devise? Когда анонимный пользователь «может» войти в систему, вошедший в систему пользователь «не может».

Могу ли я определить возможности cancan для анонимных пользователей или мне следует избегать cancan для анонимных пользователей?

Ответы [ 2 ]

2 голосов
/ 20 января 2012

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

Конечно, это можно сделать с помощью Devise, добавив before_filters к контроллеру:

before_filter :authenticate_user!, :except => [:new, :create]
before_filter :user_signed_out,    :only   => [:new, :create]

затем добавьте это в конец контроллера:

private
  def user_signed_out
    if user_signed_in?
      flash[:alert] = "You are already signed in as #{current_user.email}."
      redirect_to(root_path)
    end
  end

Однако, кажется, я могу сделать то же самое в CanCan Ability.rb:

user ||= User.new # guest user (not logged in)
can :create, Account if user.id.nil?

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

2 голосов
/ 13 июля 2011

Я не уверен, что полностью понимаю вопрос.Конечно, вы можете разрешить анонимным пользователям делать что-то с cancan

#anyone can see this stuff
can :read, [Contact, Question, UserAction, Provider, Organisation]

#only users that are managers can do this
if user.can_manage_data?
  can :manage, [Contact, Organisation, UserAction]
end

Но я думаю, что вы на самом деле спрашиваете: «Можно ли разрешить анонимным пользователям делать то, что не могут войти в систему?Это не то, что я сделал, но я предполагаю, что вы можете использовать

#noone can see this stuff
cannot :read, [Contact, Question, UserAction, Provider, Organisation]

Если вопрос конкретно о входе в систему, хотя - я думаю, что это немного другая проблема - пользователь может прочитайте статью (или нет), но пользователь вошел в систему (или нет), и в данном конкретном случае я не думаю, что cancan - правильный ответ

...