我想通过CanCan根据角色限制对report
模型的访问。具体来说,我希望: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
答案 0 :(得分:0)
您提供的查询中没有CanCan方法,因此它不了解您的限制。
尝试使用accessible_by
来确定关系的范围:
Report.accessible_by(Ability.new(current_user)).pending_approval # ... etc