我在使用条件哈希时遇到 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 作为我们的数据库。谢谢。