簡體   English   中英

在寶石中使用CanCan

[英]Using CanCan within a gem

我不確定這是否可行,但我想在自己的gem中使用CanCan。 我嘗試了以下代碼:

module DynamicMenu
  require 'engine' if defined?(Rails)
  require 'cancan'

    module MenuItems
      #The new dynamic_menu encapsulates 
      class DynamicMenu
    def initialize
    @actionMenuItems ||= []
    end

    def newmenuitem(name,link,method=:get,confirm="Are you sure?")
          genlink = ""

          if method==:delete
            genlink += "<a href=\"#{link}\" data-confirm=\"#{confirm}\" data-method=\"delete\" rel=\"nofollow\">
     #{name}</a>".html_safe
          elsif link==:submit
            genlink += "<a href=\"#\" data-submit=\"true\">#{name}</a>".html_safe
          elsif link == :back
            genlink = "<a href=\"#\" data-back=\"true\">#{name}</a>".html_safe
          else
           genlink = "<a href=\"#{link}\">#{name}</a>".html_safe
          end      
  @actionMenuItems << genlink.html_safe
end

    def newCanCanProtectedItem(name,link,method=:get,confirm="Are you sure?")
       actions = Rails.application.routes.recognize_path(link)
    if defined?(CanCan) and can? actions[:action],actions[:controller].singularize.capitalize
        newmenuitem(name,link,method,confirm)
     else
       @actionMenuItems << "CANCAN NOT DEFINED OR ABILITY.RB PROBLEM";
     end
end

    def getItems
   return @actionMenuItems
    end

  end


  end
end

這樣做時我得到未定義的方法can?

CanCan需要依靠能力等級。 因此,您需要以某種方式包括能力類。 基本內容如下:

 class Ability
 include CanCan::Ability
     def initialize(user)
     end
 end

我使用了一個假設,但這可能應該是一個初始化程序或諸如此類的東西,該類稱為能力。

在寶石中使用CanCan時,必須創建能力類的新實例,或者將其傳遞給我。我這樣做了:

ability = Ability.new(current_user) #You have to pass in a user

必須傳遞用戶。但是,看起來current_user沒有在gem范圍內定義。 因此,我也將用戶傳遞給了我的方法。

之后,我可以執行以下操作:

ability.can? actions[:action],actions[:controller].singularize.capitalize

暫無
暫無

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

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