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