我有兩個共享多對多關聯的模型,事件和用戶。用戶可以是管理員,經理或製片人。 只有屬於某個事件的生產者才能夠讀取該事件。我試圖在能力模型上應用這個限制,但它失敗了,每個生產者都可以閱讀所有事件。我究竟做錯了什麼?使用CanCan授權基於多對多關聯的資源
class Event < ActiveRecord::Base
has_and_belongs_to_many :producers, :class_name => "User", :join_table => "events_producers"
end
class CreateEventUserJoinTable < ActiveRecord::Migration
def self.up
create_table :events_producers, :id => false do |t|
t.integer :event_id
t.integer :user_id
end
end
def self.down
drop_table :events_producers
end
end
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new() # Guest user
if user.role? :manager
can :manage, :all
elsif user.role? :admin
can :read, Event
can :update, Event
can :create, Event
elsif user.role? :producer
can :read, Event do |event|
event.try(:producers).include?(user)
end
end
end
end