0

条件のハッシュを使用しているときに、アクセスを許可するべきではないと思うときに、CanCan がアクセスを許可することに問題があります。

プロジェクトと呼ばれる 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 }}}

所有者以外のユーザーがプロジェクトを管理する必要がある場合があります。私はこれらのユーザーを「編集者」と呼んでいます。編集者を確認するために、コラボレーター テーブルに「editor」というブール フィールドがあります。編集者のアクセスを許可するために、CanCan で次の条件のハッシュを作成しました。

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

ただし、編集者フィールドがいずれかのコラボレーターに対して 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 に答える