簡體   English   中英

Rails-用於initialize_cancan_ability的ActiveAdmin和CanCan自定義覆蓋方法

[英]Rails - ActiveAdmin & CanCan custom override method for initialize_cancan_ability

我試圖按照此處的建議將請求數據傳遞給能力模型:

class ApplicationController < ActionController::Base
  #...

  private

  def current_ability
    @current_ability ||= Ability.new(current_user, request.remote_ip)
  end
end

和這里:

class Ability
  include CanCan::Ability

  def initialize(user, ip_address=nil)
    can :create, Comment unless BLACKLIST_IPS.include? ip_address
  end
end

參見: https : //github.com/ryanb/cancan/wiki/Accessing-request-data

但是,我將ActiveAdmin與CancanAdapter一起使用,並且它通過以下方式使用單獨的初始化調用:

def initialize_cancan_ability
  klass = resource.namespace.cancan_ability_class
  klass = klass.constantize if klass.is_a? String
  klass.new user
end

參見: https : //github.com/activeadmin/activeadmin/blob/master/lib/active_admin/cancan_adapter.rb

那么,如何/在何處重新定義initialize_cancan_ability以便我可以傳遞與current_ability示例類似的請求數據?

基本上,我希望這樣替換最后一行:

klass.new user, request

謝謝。

您可以在lib/monkey_patches/active_admin.rb下創建文件,並將覆蓋的方法放在此處:

require 'cancan'

# Add a setting to the application to configure the ability
ActiveAdmin::Application.inheritable_setting :cancan_ability_class, "Ability"

module ActiveAdmin
    private

    def initialize_cancan_ability
      klass = resource.namespace.cancan_ability_class
      klass = klass.constantize if klass.is_a? String
      klass.new user, request
    end

  end

end

如果使用Devise,則可以從用戶模型user.current_sign_in_ip訪問Ip。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM