我有一些cancan和嵌套路线的问题。
我有这条路线:
resources :companies do
resources :projects
end
我对公司模型的能力没有任何问题,但对于项目模型,如果他们不是公司的管理员,我想拒绝访问Project#index。
下一个代码有效:
can :show, Company do |company|
if user.admins.include?(company) #check if the user is admin of the company
can :index, Schedule, :company_id => company.id
end
end
但我该怎么做:
can? :index, Project
我尝试重命名方法:
can :index_projects, Company do |company|
if user.admins.include?(company) #check if the user is admin of the company
can :index, Schedule, :company_id => company.id
end
end
并使用:
can? :index_projects, @company
但它不起作用。你知道怎么做吗?
感谢。
答案 0 :(得分:3)
你需要在ProjectsController中使用这样的东西:
class ProjectsController < ApplicationController
def index
authorize! :index, Ability
@projects = Project.order(:created_at)
end
end
当你试图访问Projects#index时CanCan将根据用户能力检查能力并拒绝或允许访问
prooflink https://github.com/ryanb/cancan/issues/209#issuecomment-609043
希望这是你需要的东西=]