如何限制可用于显示操作的记录?我遇到的问题是,您可以手动更改 URL 中的 ID 并查看不属于该公司的项目。
我的路线如下所示:
/companies/:id/projects/:id
这是表演 Action
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
路线.rb
resources :companies do
resources :projects
resources :employees
resources :requests do
put 'accept', :on => :member
end
end
项目.rb
class Project < ActiveRecord::Base
attr_accessible :title
belongs_to :company
validates :title, presence: true
end
公司.rb
公司类 < ActiveRecord::Base attr_accessible:名称
has_many :projects
结束
最佳答案
假设您在 Company
和 Project
之间存在 has_many
关系,我会将您的 Controller 代码更改为:
def show
@company = Company.find(params[:company_id])
@project = @company.projects.find(params[:id])
end
请记住,这并不能真正解决您的问题,因为人们仍然可以更改 company_id
并轻松查看其他公司。您需要的是一个更可靠的授权框架,例如 CanCan防止未经授权的资源访问。
关于ruby-on-rails - 将记录与显示操作中的嵌套路由相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11308075/