簡體   English   中英

Rails:cancancan gem條件不起作用

[英]Rails: cancancan gem condition is not working

在我的項目中,我有一個使用Devise身份驗證的用戶類。 每個用戶都有一個與之關聯的角色。 例如,經理是第一角色。

角色是一個類,並且基於role_id在角色和用戶之間存在關聯。 因此,經理的role_id為1。

我安裝了cancancan gem,以管理每個用戶的權限。 只有管​​理員可以創建用戶帳戶。 所以,我在能力課程中寫了這個:

def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.role_id == 1
      can :manage, :user
    else
      cannot :manage, :user
    end
end

在我的用戶控制器中,我有:

def new
  @user = User.new 
  authorize! :manage, @user
end

問題是,當我用經理登錄並嘗試訪問新的用戶頁面時,我收到了cancancan的消息,說我無權訪問該頁面。

我不知道這是我的病情還是何時嘗試訪問user.role_id或...

謝謝你的幫助。

參見cancancan gem: https : //github.com/CanCanCommunity/cancancan

編輯:

如果我的IDE表示找不到current_user,這是正常的嗎? 在此處輸入圖片說明

另外,如果您在github上檢查,則有一個如何使用cancancan的示例:

在此處輸入圖片說明

如您所見,讀取權限后有一個@article。 所以我認為我不需要放置current_user而不是@user

最后:

問題是:user不正確。 當它是模型時,您需要首先在模型名稱前寫一個大寫字母,不要使用“:”。 因此,代替:user ,應該是User

current_user依賴於Rails會話。 由於這是您對用戶控制器執行的#new操作,因此您沒有活動的會話,因此沒有current_user。

暫無
暫無

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

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