簡體   English   中英

Cancancan Cant可以與用戶和管理員一起使用

[英]Cancancan Cant get it work with User and Admin

所以我用Cancancan寶石在我application.I具有與設計/ Omniauth寶石和管理員 ,他們用一個簡單的自定義身份驗證驗證身份驗證的用戶 我想實現

ability.rb

def initialize(userOrAdmin)

if userOrAdmin.user?
    can :read, User 
    return unless user.present?
    can :manage, User, id: user.id
  elsif userOrAdmin.admin? 
    can [:update, :read] , Admin, id: admin.id
  end
 end
end

但這不起作用。 我試圖覆蓋這樣的能力方法

application_controller

 def current_ability

   if current_admin?
     @current_ability ||= Ability.new(current_admin)
   elsif current_user?
     @current_ability ||= Ability.new(current_user)
   end
 end

但是我收到一個nomethod current_admin錯誤,可能是因為Cancancan從設備中假設了current_admin,但是盡管我使用了自己的current_admin方法,卻找不到它。

我還嘗試為User.rb和Admin.rb中的枚舉分配角色,並正確更改了能力.rb,但是我得到了一個未定義的方法admin? 對於用戶錯誤

Cancancan Verion 2.0

我找到了一個可行的解決方案application_controller.rb

def current_ability
 if current_user
        return if current_admin.present?
     @current_ability ||= Ability.new(current_user)
   elsif current_admin
        return unless current_admin.present?
     @current_ability ||= Ability.new(current_admin)
   end
 end

結束

ability.rb

class Ability
  include CanCan::Ability
  def initialize(userOrAdmin)
    if userOrAdmin.is_a? User
      can :read, User
      can [:update, :read], User, id: userOrAdmin.id
    elsif userOrAdmin.is_a?  Admin
      can :read, Admin
      can [:update, :read], Admin, id: userOrAdmin.id
   end
 end
end

雖然這沒有錯誤。 每當我以用戶和管理員身份登錄時,管理員角色就會出現CanCan notauthorized錯誤。

經過一番搜索,我發現了一些有用的文章:

我建議您嘗試以下方法:

# Ability.rb
class Ability
  include CanCan::Ability

  def initialize(user)
  # Everyone:
    can :read, User
  # Users:
    return unless user.present?
    can :manage, User, user_id: user.id
  # Admins:
    return unless user.admin?
    can :manage, :all
  end
end
# Routes.rb
devise_for :users  # current_user:
devise_for :admins  # current_admin: 
# Application_Controller.rb
def current_ability
  @current_ability ||= current_admin ? AdminAbility.new(current_admin) : UserAbility.new(current_user)
end

暫無
暫無

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

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