我有应用程序和引擎(gems,Rails :: Engine)。 CanCan用于授权,我想在引擎上使用它。 使用命名空间隔离的引擎,但例如:
module MyEngine
class ApplicationController < ::ApplicationController
end
end
所以,我可以在控制器上使用load_and_authorize_resource(必须指定模型类名)和'can'帮助器。我必须在主应用程序中写入能力的所有能力(来自引擎的模型必须是命名空间)。这不是一个好方法。我想在这个引擎中指定引擎的能力,但是没有创建新的能力对象。 我怎样才能做到这一点?有什么想法吗?
答案 0 :(得分:2)
它不是非常漂亮,但我做了类似于我正在写的Rails应用程序。我在这个名为FormX的应用程序中编写了自己的引擎,这是一种形式的CMS引擎。我希望用户能够仅编辑对表单的某些响应,并且只有一些用户能够创建表单。
鉴于我在Form
命名空间中有Formx
模型,我可以使用ability.rb
语法在我的MainApp Formx::Form
文件中定义功能。
实施例
can :manage, Formx::Form
然后在我的控制器中,我不得不在每个操作中手动放置authorize!
个调用,因为我无法让load_and_authorize_resource
在引擎的命名空间内工作。