0

我在使用条件哈希时遇到 CanCan 允许访问的问题,我认为它不应该允许访问。

我有一个名为projects的 rails 模型/表,它控制对文档和集合(文档集)的访问。如果项目所有者给予许可,多个用户(称为合作者)可以访问项目。还有一个协作者表,用于跟踪哪些用户可以访问哪些项目。

对于使用单个权限或单个嵌套权限的只读访问,这一切都按预期工作。例如,这适用于合作者:

can :read, Project, :collaborators => { :user_id => user.id }
can :read, Collection, :projects => { :collaborators => { :user_id => user.id } }
can :read, Document, :collection => { :projects => { :collaborators => { :user_id => user.id }}}

我有一个案例,所有者以外的用户可能需要管理项目。我称这些用户为“编辑”。为了检查编辑器,我在协作者表中有一个名为“编辑器”的布尔字段。为了允许编辑访问,我在 CanCan 中创建了以下条件哈希:

can :manage, Project, :collaborators => { :user_id => user.id }, :collaborators => { :editor => true }

但是,如果编辑器字段对任何协作者为真,则这将授予对所有协作者的管理访问权限。如果协作者也是编辑者,我只想授予协作者管理访问权限,所有其他协作者应该只有读取权限。由于上述能力不起作用,我有一个想法,我需要的是这样的:

can :manage, Project, :collaborators => { :user_id => user.id AND :editor => true}

但我不知道该怎么做。如果有帮助,我们将使用 PostgreSQL 作为我们的数据库。谢谢。

4

1 回答 1

0

这在文档中讨论传递条件哈希时进行了描述。语法不应该使用一个AND而只是一个常规的哈希:

can :manage, Project, :collaborators => { :user_id => user.id, :editor => true} 
于 2013-09-06T18:21:28.260 回答