设计可邀请 - 限制只有受邀用户的访问权限

时间:2014-12-05 17:44:58

标签: ruby-on-rails ruby ruby-on-rails-3 devise devise-invitable

我可能正在搜索错误的关键词,但我找不到一种方法来限制被邀请被允许在我的rails网站上创建帐户的用户(或者我可能正在使用设计错误的设计) 。我假设,我应该在before filter中调用一个方法,或者在initializer / devise.rb上翻转开关

我尝试使用 users_controller.rb ,并且没有使用Ruby Doc作为reference

的运气
before_filter: invited?

我已经阅读了初始化器/ devise.rb和自述文件,但没有任何运气。

2 个答案:

答案 0 :(得分:1)

我认为您应该为此目的制作自定义过滤器。

before_action :authenticate_user!

before_filter :restrict_only_invited_users

def restrict_only_invited_users
  redirect_to :root if current_user.invitation_accepted_at.blank?
end

答案 1 :(得分:1)

我发现我并没有想到这一点。通过设计限制用户使用路线,而不是设计 - 邀请。

使用Solution #2作为参考(见下文)

让我们假设您不想允许注册,但您希望允许更改注册用户的密码。只需将此代码粘贴到routes.rb:

即可
devise_for :users, :skip => [:registrations]                                          
    as :user do
      get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'    
      put 'users/:id' => 'devise/registrations#update', :as => 'user_registration'            
    end

然后你可以在你的视图中建立这样的链接:

= link_to "Change your password", edit_user_registration_path

注意:您需要相应地更新默认设计视图,即在app/views/devise/registrations/edit.html.erbregistration_path(resource_name)更改为user_registration_path(resource)(如果对多个模型使用共享视图,则可以使用{{1} }

注意:如果您使用的是rails 4.0+,则应该使用patch而不是put进行更新。您应该更改驻留在send("#{resource_name}_registration_path", resource))app/views/devise/registrations/edit.html.erb文件中的form_tag中的方法。