在我的应用程序中,我有模型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
的用户访问此页面/视图文件所有者。
答案 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查询