Ruby on rails 设计和坎坎不能:摧毁用户
我有一个使用CacCan和Desive的应用程序。我正在设计处理用户销毁操作 路线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
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