report
CanCan経由でロールごとにモデルへのアクセスを制限したい。具体的には、:admin
すべてを管理する:expert
役割、チームに属するすべてのレポートを作成、読み取り、編集し、自分のレポートのみを削除するuser
役割、および自分のレポートを作成、読み取り、編集、および削除する役割が必要です。
@reports = report.pending_approval.by_team(current_user.team_id)
次の機能と、関連するすべてのコントローラーのauthorize_resourceに基づいて、上記のクエリはユーザーが作成したレポートのみを返すと予想していましたが、特定のチームのすべてのレポートを返します。問題のチームに割り当てられている場合、特定のチームに属するすべての「保留中」のレポートをクエリで返すようにしcurrent_user
ます。:expert
current_user が専門家であるかどうかに関係なく、チームに属するすべてのレポートを返す理由を知っている人はいますか? :expert
( ) ロールをチェックするようにクエリを変更する必要がありますか? チーム エキスパートのみにアクセスを制限するには、クエリを変更して、クエリまたは CanCan 機能でチーム メンバーシップと役割を確認する必要がありますか?
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.role? :admin
can :manage, :all
elsif user.role? :expert
can :read, Report, :user_id => user.id, :submitted => false
can :create, Report
can :update, Report, :user_id => user.id, :submitted => false
can :destroy, Report, :user_id => user.id, :submitted => false
else
can :read, Report, :user_id => user.id, :submitted => false
can :create, Report
can :update, Report, :user_id => user.id, :submitted => false
can :destroy, Report, :user_id => user.id, :submitted => false
end
end
end