Ruby 在 Rails - 使某些用户可以访问视图

Ruby on Rails - Make view accessible to certain users

在我的应用程序中,我有模型 FileFileAccess用户 A 可以上传文件并向许多其他用户授予访问权限 (其他用户请求访问权限).

我的模特:

class File < ActiveRecord::Base
  belongs_to :user
  has_many :file_accesses

class FileAccess < ActiveRecord::Base
  belongs_to :user
  belongs_to :file

我的FilesController:

class FilesController < ApplicationController
  def accepted_users
     FileAccess.create(user_id: params[:user_id], file_id: params[:file_id], accept: true)
  end

我的routes.rb:

get 'i/:user_id/:file_id', to: 'files#accepted_users', as: :file_access_accepted

我的看法:

= link_to "Give Access", file_access_accepted_path(@file, other_user.id)

其他用户 可以请求访问权限 & 用户 A 可以 select 他们想要授予文件访问权限的用户单击 授予访问权限 按钮。

在我的 FilesController 中,我有一个 access_file 操作和视图:

class FilesController < ApplicationController
  def access_file
    redirect_to @file, alert: "You don't have access to this page!" if @file.user != current_user
  end

目前这个 view/page 只有 文件所有者 可以查看,如果用户不是文件所有者,他们将被发回警告。

我怎样才能做到这一点 page/view 可供 文件所有者 AND 所有其他已接受的用户访问accept: true 文件所有者

试试这个

def access_file
  if @file.user != current_user && !@file.file_accesses.map(&:user).include?(current_user)
    redirect_to @file, alert: "You don't have access to this page!"
  end
end

def access_file
  if @file.user != current_user && !FileAccess.exists?(file: @file, user: current_user)
    redirect_to @file, alert: "You don't have access to this page!"
  end
end

后者应该只是一个SQL查询