2013-07-09 143 views
0

我比較新的軌道上的紅寶石,所以我現在很困惑如何爲管理員設置用戶管理系統。創建用戶與管理員和可註冊

此外,用戶應該能夠註冊自己(Devise Registerable)。

我有一個用戶控制器,使用devise_for:用戶和資源:用戶。

我可以登錄用戶,因爲我在用戶模型中使用了:可註冊標誌。

我現在想要做的是增加管理員創建用戶的能力。

如果我使用了描述的系統,當通過/ users/new以admin身份創建新用戶時,我總是收到'您已經登錄'的消息。這是來自設計的消息。

所以我按照教程www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/使用cancan來限制某些動作並創建了自己的動作設計像這裏描述的註冊控制器。

我的康康舞能力模型是這樣的:

if user.has_role?(:admin) 
    #admin 
    can :manage, :all 
elsif !(user.new_record?) 
    #logged in but no admin 
    ... 
else 
    # Guest 
    can :create, User 
end 

,我的註冊控制器就像在教程

class RegistrationsController < Devise::RegistrationsController 
    before_filter :check_permissions, :only => [:new, :create, :cancel] 
    skip_before_filter :require_no_authentication 

    def check_permissions 
    authorize! :create, resource 
    end 
end 

我還添加控制器到routes.rb中

有了這個我可以使用管理員創建新用戶,但是如果我想以未登錄用戶的身份登錄(「#Guest」),我總是會收到cancan異常「拒絕訪問」的消息。如果我在CanCan異常處理中調用exception.subject,它是空的。

難道,我的控制器中的「資源」未初始化?我如何得到預期的行爲?

非常感謝您的幫助;-)

回答

1

MHM,我想通了,該資源似乎是色器件控制器的方法。 不知道,爲什麼它不叫,或者沒有返回一個對象

我的解決辦法,現在(因爲我只能註冊用戶)來改變

def check_permissions 
    authorize! :create, resource 
end 

def check_permissions 
    authorize! :create, User #could also be User.new 
end 

而且與此一起工作。但我不確定,如果是最好的解決方案;-)

相關問題