我有一个使用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阻止非管理员的用户能够删除用户?
非常感谢任何帮助。
由于
答案 0 :(得分:0)
在我看来,你定义了能力,但根本没有使用它们。
我建议至少阅读this(gem有一个包含非常有用信息的覆盖维基,因此值得阅读所有文章)。
我更喜欢使用强大的load_and_authorize_resource
但在你的情况下可能已经足够authorize!
(代码未经过测试!)
def destroy
@user = User.find(params[:id])
authorize! :destroy, @user
...
end