0

我对 ruby​​ on rails 比较陌生,所以我现在很困惑如何为管理员设置用户管理系统。

此外,用户应该能够注册自己(设计可注册)。

我有一个用户控制器,使用 devise_for :users 和 resources :users 。

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

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

如果我使用所描述的系统,当以管理员身份通过 /users/new 创建新用户时,我总是会收到消息“您已登录”。这是来自设计的消息。

因此,我按照教程 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 它是空的。

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

非常感谢你的帮助 ;-)

4

1 回答 1

1

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

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

def check_permissions
    authorize! :create, resource
end

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

有了这个,它就可以工作了。但我不确定这是否是最好的解决方案;-)

于 2013-07-10T16:32:10.137 回答