1

DeviseとCanCanを使用するアプリがあります。config>initializers>Abiliity.rbクラスのAbilityincludeCanCan :: Ability

  def initialize(user)
    if user.is? :superadmin
      can :manage, :all
    elsif user.is? :user
      can :read, Project do |project|
         project && project.users.include?(user)
      end
    end
  end
 end

プロジェクトコントローラーのインデックスアクションに問題があります。プロジェクトコントローラーは通常のストックRESTfulコントローラーです。基本的に、通常のユーザーであるユーザーは、ログインすると、projects#indexを表示できます。しかし、すべてのプロジェクトでこのユーザーが「通常のユーザー」であるとは限りません。なぜ彼のアクセスをブロックできないのでしょうか。

ありがとう

4

1 に答える 1

2

次の行に沿って、で呼び出していることを確認してくださいload_and_authorize_resourceProjectsController

class ProjectsController < ApplicationController
  load_and_authorize_resource

  #...
end

それでもうまくいかない場合はauthorize!、 index アクション内でメソッドを呼び出して、違いが生じるかどうかを確認してください。次に例を示します。

class ProjectsController < ApplicationController
  #...

  def index
    @projects = Project.all
    authorize! :read, @projects
  end

  #...
end
于 2010-08-27T05:42:19.220 に答える