1

我有嵌套资源,我想允许部门/1/列表、公司/1/列表并继续,我该怎么做?顺便说一句,我使用 rails 5 和 cancancan 2.0

这是我的文件:

路线.rb

resources :departments do
    resources :lists
  end

  resources :lists do
    member do
      put :done
    end
  end

  devise_for :users, :skip => [:registrations]

  devise_scope :user do
    root to: "devise/sessions#new"
    get "/users/edit" => "devise/registrations#edit", :as => :edit_user_registration
    patch "/users" => "devise/registrations#update", :as => :user_registration
    put "/users" => "devise/registrations#update"
  end

  resources :users do
    resources :lists
  end

  resources :companies do
    resources :lists
  end

列表.rb

class List < ApplicationRecord
      belongs_to :listable, polymorphic: true
    end

部门.rb

class Department < ApplicationRecord
  has_many :lists,  as: :listable
end

公司.rb

class Company < ApplicationRecord  
  has_many :lists, as: :listable
end

列表控制器.rb

class ListsController < ApplicationController
  load_resource :department
  load_resource :company
  load_resource :user
  load_and_authorize_resource :list, :through => [:department, :company, :user]

能力.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new

    if user.has_role? :admin
      can :manage, :all
    else
      can :read, List, { :company => { :id => user.company_id } }
      can :read, List, { :department => { :id => user.departments.first.id } }
    end
  end
end

谢谢。

我还是想不通

有人请帮助我。

4

1 回答 1

0

尝试:

class ListsController < ApplicationController
  load_resource :department
  load_resource :company
  load_resource :user
  load_and_authorize_resource :list, :through => [:department, :company, :user]
end

lists,应该是list:)

于 2017-07-17T08:44:13.750 回答