Cancan nested_routes ограничивает доступ к: index - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть некоторые проблемы с канканами и вложенными маршрутами.

У меня есть эти маршруты:

resources :companies do
   resources :projects
end

У меня нет проблем с возможностями для модели компании, но для модели проекта Iхочу запретить доступ к индексу 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

Но он не работает.Вы знаете, как это сделать?

Спасибо.

1 Ответ

3 голосов
/ 31 мая 2012

вам нужно использовать что-то подобное в вашем 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

надеюсь, что это то, что вам нужно =]

...