Ruby 在 Rails - 将视图 and/or 编辑分配给不同的用户(在同一团队中)

Ruby on Rails - Assign View and/or edit to different users (in same team)

在我的应用程序中我有模型 Team User Post.

class User < ActiveRecord::Base
  has_many :posts
  belongs_to :team

class Team < ActiveRecord::Base
  has_many :users

class Post < ActiveRecord::Base
  belongs_to :user

在我的 _form.html.haml 我有这部分:

- User.where(team_id: current_user.team_id).each do |user|
  %p=user.name

显示同一团队中的所有用户。

当一个用户(在同一个团队中)写了一个post。我希望他们能够分配可以 Edit and/or View post.

的用户

这意味着用户可以将一些用户分配给仅查看,而一些用户分配给查看和编辑.

我该怎么做,最好的方法是什么?

您可以创建实例方法并使用它

class User < ActiveRecord::Base
  has_many :posts
  belongs_to :team

  def team_members
    User.where(team_id: team_id)

    # If you dont want current_user/self in the result you can use
    # User.where(team_id: team_id).where.not(id: id) 
  end
end

现在您可以使用它了

- current_user.team_members.each do |user|

此外,您可以在下拉菜单中使用它

= f.collection_select :user_id, current_user.team_members, :id, :name

问。如何将 post 的查看 and/or 编辑和查看分配给同一团队中的每个用户?

一个。您可以查看当前用户是否属于post作者

的团队

类似

- @posts.each do |post|
  - if post.user.team_members.include?(current_user)
    = link_to "Edit", edit_post_path(post)

我会创建另一个模型,可能如下所示:

class Permission < ActiveRecord::Base
  belongs_to :post
  belongs_to :user

class User < ActiveRecord::Base
  has_many :posts
  has_many :permissions
  belongs_to :team

class Team < ActiveRecord::Base
  has_many :users

class Post < ActiveRecord::Base
  has_many: permissions
  belongs_to :user

权限模型可能包含 "id"、"post_id"、"user_id"、"editable" 和 "viewable" 等字段(最后 2 个字段为布尔值)。提交时,您可以创建与用户为 post 选择的权限角色一样多的权限角色。如果@user.post.permission == post.user_id && @user.permission.editable,您将只允许人们编辑?两者都返回 true(或类似的东西,不确定你的应用程序的其余部分是如何设置的)