如何通过Clearance and Pundit邀请其他用户加入“团队”或“帐户”或“项目”?

时间:2018-05-23 14:56:08

标签: ruby-on-rails ruby user-accounts pundit clearance

我有一个带有Clearance和Pundit的Rails应用程序,我正在尝试创建“团队”,“团队负责人”可以邀请其他用户加入他们的团队。我想something similardevise_invitable,但是有了Clearance。

以下是我如何运作的计划:

  1. 通过注册表单注册该站点的用户将自动分配一个唯一的团队ID,并成为“团队负责人”。他们在表单上看不到此ID。 (可以这样做的另一种方法是创建一个在注册时保存的唯一团队名称。)最好的方法是创建一个before_filter,以便在注册时分配团队ID和团队负责人吗?

  2. 团队ID或名称将是唯一的,每个用户只能属于一个团队。协会看起来像这样:

    团队

    has_many :users
    

    用户

    belongs_to :team
    
  3. 创建此“团队负责人”帐户后,此用户可以通过填写类似于清除注册表单(姓名,电子邮件等)的用户#新表单,邀请其他用户加入团队。表单将创建用户并将其分配给团队负责人的团队。可以为他们分配一个随机密码以提供给Clearance,以便新用户通过验证。

  4. 一旦用户由团队负责人创建,他们将使用随机生成的密码保存在数据库中,并将Mailer发送给与标准清除密码重置邮件程序类似的受邀用户。它只是给了他们一个通知,他们已被邀请加入团队,并提供一个重置密码然后登录的链接。它基本上是清除密码重置梅勒与不同的副本。

  5. 这是一个不错的策略,还是我用ClearancePundit来解决这个问题时缺少一种更广泛使用的模式?我从来没有用Rails做过这样的事情,所以我不知道这是否是一种使用Clearance的管道式磁带方式。

1 个答案:

答案 0 :(得分:5)

你的计划很好。没有ClearancePundit具体方法可以执行此操作。当然,您的策略似乎很好,您必须使用Clearance实现它。

  1. 据我了解,您首先要创建用户,然后为用户创建团队。因此,最好从可用的callbacks用户after_*回调。在将记录存储在数据库中之前执行before_filter挂钩。因此,例如,除非您将用户存储在数据库中,否则您无法将其分配为团队负责人"之前"用户已保存。

  2. 如果您想使用UUID而不是ID,则可以执行this之类的操作,否则您只需使用name teams列上的app/controllers/team_members#create即可表。您提到的协会似乎很好。

  3. 您可以在此处创建自定义控制器以创建用户。像def create member = User.new(team_member_params) if member.save #some code else #some code end end 这样的东西。我认为不需要将导管带到unique constraint。示例代码可以是:

  4. after_create
    1. 我认为使用密码重置电子邮件不是一个好主意。您可以使用after_create :send_invitation_to_team_member, if: :not_team_leader hook发送新的邮件。
    2. public String hashToHexString(String whatever) throws NoSuchAlgorithmException{ byte[] digest = MessageDigest.getInstance("your one way hash alghoritm") .digest(whatever.getBytes()); return DatatypeConverter.printHexBinary(digest); }