Ruby on rails 设计和坎坎不能:摧毁用户

Ruby on rails 设计和坎坎不能:摧毁用户,ruby-on-rails,devise,authorization,cancan,Ruby On Rails,Devise,Authorization,Cancan,我有一个使用CacCan和Desive的应用程序。我正在设计处理用户销毁操作 路线 DELETE /users(.:format) devise/registrations#destroy 我的控制器 class UsersController < ApplicationController skip_before_filter :authenticate_user!, :only => :portfolio def index redirect_to da

我有一个使用CacCan和Desive的应用程序。我正在设计处理用户销毁操作

路线

DELETE /users(.:format)    devise/registrations#destroy
我的控制器

class UsersController < ApplicationController
  skip_before_filter :authenticate_user!, :only => :portfolio

  def index
    redirect_to dashboard_user_path(current_user)
  end

  def dashboard
    ...
  end

  def portfolio
  end
end
上面的代码不起作用。不是管理员的用户仍然可以删除用户。我假设原因是我没有UsersController#destroy方法

所以我的问题是,如何让CanCan阻止非管理员用户删除用户

任何帮助都将不胜感激


谢谢

在我看来,你定义了能力,但根本没有使用它们

我建议至少读一读(gem有一个reach wiki,其中包含非常有用的信息,所以值得阅读所有文章)。 我更喜欢使用功能强大的
load\u和\u authorize\u资源
(未测试代码!)


谢谢你的回答。我试过了!使用load_和authorize_资源,对于非管理员的用户,删除仍然会发生。我想知道是否有一种方法可以对Desive调用的操作执行授权。我这样说的原因是;我可以在我的控制器中创建一个方法,并为该方法创建一个路由。然后做你建议的改变。但它不会阻止某些人运行designe/registrations#destroy,这会删除一个用户。我认为(但我不确定)destroy路由会转到另一个控制器/操作。我发现了几个例子:Desive不提供
destroy
action的断言提供了另一个例子。我建议在用户销毁帐户时检查您的操作是否有效,然后调试功能,否则请尝试实现Desive示例并在那里应用
authorize
。Desive::RegistrationController#destroy中的第一行是resource.destroy。我相信这是使用我的用户销毁方法实现的。我不确定我是否可以使用第一个链接,但第二个指向Desive wiki的链接似乎很有希望。我会看一看,让你知道它是否有效。
class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    if user.role?('Administrator')
      can :access, :rails_admin
      can :dashboard
      can :manage, :all
    else
      cannot :destroy, User
      can :read, :all
      ...
    end
  end
end
def destroy
  @user = User.find(params[:id])
  authorize! :destroy, @user
  ...
end