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

时间:2017-09-10 21:51:18

标签: ruby ruby-on-rails-4 controller user-permissions

在我的应用程序中,我有模型File& FileAccess用户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)

其他用户可以要求访问&amp; 用户A 可以通过点击授予访问权限按钮来选择他们想要提供文件访问权限的用户。

在我的FilesController我有一个access_file动作&amp;视图:

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

目前此视图/页面仅供文件所有者查看,如果用户不是文件所有者,则会发回警报。

如何实现该目标,以便文件所有者 所有其他被接受accept: true的用户访问此页面/视图文件所有者

1 个答案:

答案 0 :(得分:0)

试试这个

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查询