使用admin AND registerable创建用户

时间:2013-07-09 10:45:35

标签: ruby-on-rails-3 devise cancan

我对rails上的ruby比较新,所以我现在很困惑如何为管理员设置用户管理系统。

此外,用户应该能够注册自己(Devise Registerable)。

我有一个用户控制器,使用devise_for:用户和资源:用户。

我可以签名用户,因为我在我的用户模型中使用了:registerable,标志。

我现在要做的是为管理员添加创建用户的能力。

如果我使用了所描述的系统,则在通过/ users / new创建新用户时,我始终会收到“您已登录”消息。这是来自设计的信息。

所以我按照教程www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-andcancan-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

有了这个我可以用admin创建新用户,但是如果我想sign_up因为没有登录用户(“#Guest”)我总是得到消息cancan异常“访问被拒绝”。如果我在CanCan异常处理中调用exception.subject,它就是空的。

可以,我的控制器的'资源'没有初始化?我怎样才能得到预期的行为?

非常感谢你的帮助; - )

1 个答案:

答案 0 :(得分:1)

嗯,我发现,该资源似乎是设计控制器的一种方法。 不知道,为什么没有调用,或者没有返回对象

我的解决方案现在(因为我只能注册用户)才能更改

def check_permissions
    authorize! :create, resource
end

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

有了这个,它就有效了。但我不确定,如果这是最好的解决方案; - )

相关问题