如何限制show动作可用的记录?我遇到的问题是你可以手动更改URL中的ID并查看不属于公司的项目。
我的路线看起来像这样:
/公司/:ID /项目/:ID
这是节目动作
projects_controller.rb
def show
@project = Project.find(params[:id])
@company = Company.find(params[:company_id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @project }
end
end
的routes.rb
resources :companies do
resources :projects
resources :employees
resources :requests do
put 'accept', :on => :member
end
end
project.rb
class Project < ActiveRecord::Base
attr_accessible :title
belongs_to :company
validates :title, presence: true
end
company.rb
类公司&lt;的ActiveRecord :: Base的 attr_accessible:name
has_many :projects
端
答案 0 :(得分:2)
假设has_many
和Company
之间存在Project
关系,我会将您的控制器代码更改为:
def show
@company = Company.find(params[:company_id])
@project = @company.projects.find(params[:id])
end
请记住,这并不能真正解决您的问题,因为人们仍然可以更改company_id
并轻松查看其他公司。您需要的是一个更加可靠的授权框架,如CanCan,可以防止未经授权的资源访问。
答案 1 :(得分:0)
答案 2 :(得分:0)
尝试将操作更改为此
def show
@company = Company.find(params[:company_id])
@project = @company.projects.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @project }
end
end