代码之家  ›  专栏  ›  技术社区  ›  Lee McAlilly

如何邀请其他用户加入“团队”、“账户”或“项目”,并获得许可和权威?

  •  5
  • Lee McAlilly  · 技术社区  · 6 年前

    我有一个有许可和权威的Rails应用程序,我正在尝试创建“团队”,“团队领导”可以邀请其他用户加入他们的团队。我想去做 something similar devise_invitable 但要有许可。

    以下是我的计划:

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

    2. 团队ID或名称将是唯一的,并且每个用户只能属于一个团队。关联如下:

      团队

      has_many :users
      

      用户

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

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

    这是一个体面的策略,还是有一个更广泛使用的模式,我想用它来解决这个问题 间隙 Pundit ?我从来没有用轨道做过这样的事情,所以我不知道这是否是一种管道胶带的使用方法。 间隙 .

    1 回复  |  直到 6 年前
        1
  •  5
  •   Kartikey Tanna    6 年前

    你的计划很好。没有 Clearance Pundit 具体方法。当然,你的策略看起来不错,你必须用 间隙 .

    1. 据我所知,您首先要创建用户,然后为该用户创建团队。所以最好是用户 after_* 从可用的 callbacks . before_filter 钩子在记录存储到数据库之前执行。因此,例如,除非将用户存储在数据库中,否则在“保存”用户之前,不能将其指定为团队领导。

    2. 如果你想用uuid代替id,你可以做类似的事情 this 或者你可以简单地使用 unique constraint name 第列,共列 teams 表。你提到的协会似乎不错。

    3. 您可以在此处创建自定义控制器来创建用户。有点像 app/controllers/team_members#create . 我认为不需要用胶带 间隙 . 示例代码可以是:

    def create
      member = User.new(team_member_params)
      if member.save
        #some code
      else
        #some code
      end
    end
    
    1. 我不认为使用密码重置电子邮件是个好主意。您可以使用发送新邮件程序 after_create 钩子。

    after_create :send_invitation_to_team_member, if: :not_team_leader