在我的应用程序中,我希望用户能够创建一个组并邀请其他用户加入该组进行协作。重要的是,这些团体是分开的,所以他们的职位不是混合的。我已经找了一段时间,我不确定如何开始解决这个问题。任何帮助将不胜感激!
TIA
我找到了此链接但不确定如何应用它。 http://www.icoretech.org/2010/03/rails-users-groups-memberships-enter-workflow/
答案 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
希望您觉得这很有帮助。