Ruby 在 Rails - 使某些用户可以访问视图
Ruby on Rails - Make view accessible to certain users
在我的应用程序中,我有模型 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)
其他用户 可以请求访问权限 & 用户 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查询
在我的应用程序中,我有模型 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)
其他用户 可以请求访问权限 & 用户 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查询