Devise和CanCan不能:摧毁用户

时间:2013-11-20 04:05:27

标签: ruby-on-rails devise authorization cancan

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

路线

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

我的能力.rb

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

上面的代码不起作用。非管理员的用户仍具有删除用户的能力。我假设的原因是我没有UsersController#destroy方法。

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

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

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

我建议至少阅读this(gem有一个包含非常有用信息的覆盖维基,因此值得阅读所有文章)。 我更喜欢使用强大的load_and_authorize_resource但在你的情况下可能已经足够authorize!(代码未经过测试!)

def destroy
  @user = User.find(params[:id])
  authorize! :destroy, @user
  ...
end