1

認証にDeviseを使用し、承認にcancancanを使用しています。一部のページでユーザーの表示を許可したくありません。だから私は次のコードを追加します。しかし、それは未定義のローカル変数またはメソッド `current_user' を # エラーでスローします。

私の能力.rb

class Ability
  include CanCan::Ability

  def initialize(dashboard_user)

       current_dashboard_user ||= DashboardUser.new 
       if current_dashboard_user.CD_DASHBOARD_ADMIN?
         can :manage, :all
       else
         can :read, :summary
         can :read, :home
       end
      .........
  end

Application_controller.rb

class ApplicationController < ActionController::Base

  protect_from_forgery with: :exception
  before_action :configure_permitted_parameters, if: :devise_controller?

  before_action :authenticate_dashboard_user!

  protected
   rescue_from CanCan::AccessDenied do |exception|
    redirect_to main_app.root_url, :alert => exception.message
  end
  ....
end

dashboard_user_controller.rb

class DashboardUsersController < ApplicationController
  before_action :set_dashboard_user, only: [:show, :edit, :update, :destroy]

  load_and_authorize_resource
  ....
end
4

1 に答える 1

1

よし、とりあえずこのトリックをやってみよう。どういうわけか current_user ヘルパー メソッドが呼び出されています。したがって、最も簡単な解決策は、次のことができる場合です。

あなたのapplication_controller.rbファイルにこのブロックを入れてください:

   def current_user
    current_dashboard_user
   end

  # method_alias :current_user=, current_user # you may need this line if required.
   helper_method: :current_user

これが役立つことを願っています。

于 2014-11-22T07:52:55.430 に答える