次の問題を解決しようとしています。
class User < ActiveRecord::Base
belongs_to :department
has_many :offers
end
class Offer < ActiveRecord::Base
belongs_to :user
end
class Department < ActiveRecord::Base
has_many :users
end
ユーザー クラスには、役割の属性があります。:moderator ロールが、:moderator と同じ department.id を持つすべてのユーザーのすべてのオファーを管理できるようにしたいと考えています。これまでのところ、次のことを思いつきました。
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.is? :admin
can :manage, :all
elsif user.is? :moderator
# Moderators can manage Users which belong to the same Department
can :manage, User, :department_id => user.department_id
# Moderators can manage all Offers which share the same department.id as the manager
can :manage, Offer, :department => { :id => user.department_id}
elsif user.is? :registered
# User can manage their own Offers
can :manage, Offer, :user_id => user.id
else
can :read, Offer
end
end
end
しかし、ライン
can :manage, Offer, :department => { :id => user.department_id}
必要なオファーだけでなく、すべてのオファーを表示します。行を変更する方法はありますか?多分オファーモデルのスコープですか?