【发布时间】:2017-01-25 14:02:57
【问题描述】:
我在我的 Rails 应用程序中使用 CanCan gem,并想检查当前请求是否是我的应用程序中的受保护资源。
例如,我有以下内容:
class AdminController < ApplicationController
load_and_authorize_resource
end
如何检查请求是否受 CanCan 保护?
我可以通过参数访问控制器和操作。我不能使用标准的 can? 和 cannot? 助手,因为它们会检查 current_user 是否有权限,而不是操作本身是否有保护。
例如:
class ApplicationController < ActionController::Base
before_action :check_protected
def check_protected
if can? params[:action].to_sym, Object.const_get(params[:controller].classify)
# resource is protected
else
# resource is not protected
end
end
end
^^ 这不起作用,因为当没有current_user 或用户没有权限时,它总是会说false。 我需要检查资源本身是否受 CanCan 保护。
如果我有这些例子:
class PostsController < AdminController
def index
end
end
class HomeController < ApplicationController
def index
end
end
PostsController 的索引应该可以识别为受保护,而 HomeController 的索引应该是不受保护的。
【问题讨论】:
-
CanCan 是一个用户授权 gem,目的是检查用户是否可以访问授权资源。它需要一个能力类和 current_user 方法才能工作。您可以按照on this page 的说明覆盖默认值。
-
@trueinViso 我确实有
Ability类和current_user方法。但我想知道当前控制器方法是否附加了任何 cancan 属性。 -
控制器方法没有附加任何 cancan 属性。这些能力是在 current_user 上定义的。当你说 skip_authorize_resource 只是意味着它不会检查 current_user 是否有权访问资源。
标签: ruby-on-rails ruby cancan cancancan