Хотел бы, чтобы пользователи были разделены на группы в моем приложении Rails - PullRequest
0 голосов
/ 07 декабря 2010

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

TIA

Я нашел эту ссылку, но не уверен, как ее применитьhttp://www.icoretech.org/2010/03/rails-users-groups-memberships-enter-workflow/

1 Ответ

1 голос
/ 07 декабря 2010

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

Единственное, чего не хватает, - это приглашения.Я бы оставил это простым и просто добавил 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

Надеюсь, вы найдете это полезным.

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