2012-02-21 150 views
2

我有一些cancan和嵌套路由的問題。Cancan nested_routes限制訪問權限:索引

我有這樣的路線:

resources :companies do 
    resources :projects 
end 

我有能力爲公司的模式,但對於項目模式,我希望拒絕訪問Project#指標,如果他們不是公司的管理沒有問題。

下一個代碼工作:

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 

但它不起作用。你知道該怎麼做嗎?

謝謝。

回答

3

你需要使用這樣的事情在你的ProjectsController:

class ProjectsController < ApplicationController 
    def index 
    authorize! :index, Ability 
    @projects = Project.order(:created_at) 
    end 
end 

,當您`ll嘗試訪問項目#指數慘慘將檢查能力,並拒絕或允許訪問根據用戶的能力

prooflink https://github.com/ryanb/cancan/issues/209#issuecomment-609043

希望這是你需要什麼=]

+0

我 你能解釋我STE,這是不行的p爲此? – ashvin 2016-07-12 07:24:04

+0

@ashvin按照我上面發佈的鏈接(https://github.com/ryanb/cancan/issues/209#issuecomment-609043) – jbmeerkat 2016-07-20 16:01:07