[英]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.