我在我的Rails 5应用程序(5.1.3)中使用CanCanCan并在数据库中定义功能。 这是我定义能力的结构 -
人---角色---许可---行动。 1个人可以拥有多个角色,每个角色映射到许多权限,每个权限都有许多操作。 PermissionsRole和ActionsPermission都具有has_and_belongs_to_many关系。
在actions表中,我已经定义了字段name,resource_name和is_object。
这是我的Ability.rb -
person.roles.first.permissions.each do |permission|
permission.actions.each do |action|
if action.is_object
can action.name.to_sym, action.resource_name.constantize
else
can action.name.to_sym, action.resource_name.to_sym
end
end
end
如果is_object为false,这似乎工作正常,即如果它只是一个没有模型的控制器。我正在尝试使用它来显示对象的记录,即使所有关联都已正确设置,我也会收到访问错误。
有谁知道如何解决这个问题?
编辑:我已经覆盖了所讨论模型的default_scope,导致所有记录的访问被拒绝。 当我删除它工作,但然后我看到所有记录,而不是该用户可以访问的记录。 无论如何都要覆盖默认范围并使记录授权有效吗?