2017-10-07 46 views
0

在我的項目中,我有一個使用Devise身份驗證的用戶類。每個用戶都有一個與之相關的角色。例如,經理是#1角色。Rails:cancancan寶石狀態不起作用

角色是一個類,角色和用戶之間有一個基於role_id的關聯。因此,經理的角色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寶石:https://github.com/CanCanCommunity/cancancan

編輯:

如果我的IDE說,它無法找到CURRENT_USER這是正常的嗎? enter image description here

另外,如果你在github上檢查,有如何使用cancancan一個例子:

enter image description here

正如你看到的,有讀取權限後@article。所以,我不認爲我需要把CURRENT_USER代替@user

最後的:

問題是:user,這是不正確的。當它是一個模型時,首先需要爲模型的名稱寫一個大寫字母,而不使用「:」。因此,而不是:user,它應該是User

+0

問題是:用戶不正確。當它是一個模型時,首先需要爲模型的名稱寫一個大寫字母,而不使用「:」。所以,而不是:用戶,它應該是用戶 –

回答

0

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