3

認証とパーミッションの管理には、CanCanCan、Devise、および Rolify gem を使用します。しかし、新しいコントローラーを作成すると、次のメッセージが表示されました。

NameError in PanelController#dashboard
uninitialized constant Panel

私のPanelController:

class PanelController < ApplicationController
  load_and_authorize_resource

  def dashboard
  end
end

この行を削除するとload_and_authorize_resource 、ルートが機能します。しかし、認証なしでアクセスできます。使用するには PanelModel が必要ですか?

私のAbilityModelはこれです:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)

    alias_action :create, :read, :update, :destroy, :to => :crud

    if user.has_role? :admin
      can :manage, :all
    elsif user.has_role? :user
      can [:read], User
      can [:update, :edit], User do |account|
        account.email == user.email
      end
    else
      # can :read, :all
      can [:create, :new], User
    end
  end
end

昨日、私のコードはうまく機能しましたが、今日はなぜこのエラーが発生するのかわかりません。多分誰でも私を助けることができます。

私のルートはコントローラー用です:

  devise_scope :user do
    authenticated :user do
      # Rails 4 users must specify the 'as' option to give it a unique name
      root :to => "panels#dashboard", :as => :panel
    end

    unauthenticated do
      root 'devise/sessions#new', as: :unauthenticated_root
    end
  end
4

1 に答える 1

7

authorize_resource :class => falseこのように使用すると、対応するモデルなしで CanCanCan を使用できます

class PanelController < ApplicationController
  authorize_resource :class => false

  def dashboard
  end
end

そしてあなたの能力で:

elsif user.has_role? :user
  can :dashboard, :panel
于 2015-08-23T14:06:02.790 に答える