想在Rails应用程序中将用户分成组

时间:2010-12-07 18:13:37

标签: ruby-on-rails ruby

在我的应用程序中,我希望用户能够创建一个组并邀请其他用户加入该组进行协作。重要的是,这些团体是分开的,所以他们的职位不是混合的。我已经找了一段时间,我不确定如何开始解决这个问题。任何帮助将不胜感激!

TIA

我找到了此链接但不确定如何应用它。 http://www.icoretech.org/2010/03/rails-users-groups-memberships-enter-workflow/

1 个答案:

答案 0 :(得分:1)

该链接具有非常复杂的用户组和成员身份实现。它甚至展示了如何使用令人敬畏的Workflow gem来实现状态机来跟踪加入组的过程。老实说,我怀疑你会得到一个更好的答案。我建议你只需将博客文章中的代码作为起点,然后根据自己的需要进行修改。

唯一缺少的是邀请。我会保持简单,只需向invitation_token添加Group列即可。发送邀请时,令牌用于生成SHA-1哈希,该哈希可以是发送给受邀用户的链接的一部分。单击链接后,控制器可以检查邀请代码是否有效,并将用户添加到组中。

这里有一些示例代码,可以了解实现。我确信还有很大的改进空间,但希望它能给你一些指导:

# in your Group model
def redeem_token(some_code, invitee_name)
  invitation_token == decode_invitation_code(some_code, invitee_name)
end

def decode_invitation_code(encrypted, salt)
  # use EzCrypto or something similar : http://ezcrypto.rubyforge.org/
  # use the invitation_token as the password 
  # and the invitee name as the salt
  EzCrypto::Key.decrypt_with_password invitation_token, salt, encrypted
end

def generate_invitation_for(user)
  # use invitee name as salt 
  # and invitation_token as both password and content
  EzCrypto::Key.encrypt_with_password invitation_token, 
                                      user.name, 
                                      invitation_token
end

# in your routes.rb do something like
resources :groups do
  member do
    get 'invitation/:invitation_token', :action => :invitation
  end
  # ...
end

# in your groups_controller.rb
def invitation
  @group = Group.find(:id)
  if @group.redeem_token(params[:invitation_token], current_user.name)
    @group.add_member(current_user)
    redirect_to root_path, :alert => "You were added to the group!"
  else
    redirect_to root_path, :alert => Invitation code not valid!"        
  end
end

希望您觉得这很有帮助。