我在我的Rails应用程序中使用CanCan进行权限管理,其中我为一些通用表单功能构建了自己的引擎。我希望限制系统中的权限,以便用户无法自由访问我的引擎控制器的操作。这些控制器大部分只是使用7个REST动作,因此我想在每个控制器的顶部使用CanCan的
然而,当我像这样编写我的代码时:
我的猜测是`load_and_authorize_resource`中的自动加载程序与我的`MainApp`命名空间相关,并且没有意识到我正在使用不同的命名空间调用它,因此会执行像`Form.find(params[:id])`这样的调用,而不是`MyEngine::Form.find(params[:id])`。
如果是这种情况,我该怎么办?这并不是什么大问题,因为`authorize!`仍然正常工作,所以我可以在每个动作中单独定义授权,但如果能够使用`load_and_authorize_resource`方法会更加清晰明了。
load_and_authorize_resource
。然而,当我像这样编写我的代码时:
module MyEngine
class FormController < ApplicationController
load_and_authorize_resource
...
end
end
我遇到了这个错误:
uninitialized constant Form
我的猜测是`load_and_authorize_resource`中的自动加载程序与我的`MainApp`命名空间相关,并且没有意识到我正在使用不同的命名空间调用它,因此会执行像`Form.find(params[:id])`这样的调用,而不是`MyEngine::Form.find(params[:id])`。
如果是这种情况,我该怎么办?这并不是什么大问题,因为`authorize!`仍然正常工作,所以我可以在每个动作中单独定义授权,但如果能够使用`load_and_authorize_resource`方法会更加清晰明了。