CanCan能力和引擎的附加规则

时间:2012-08-22 00:41:06

标签: ruby-on-rails ruby-on-rails-3 cancan

我有应用程序和引擎(gems,Rails :: Engine)。 CanCan用于授权,我想在引擎上使用它。 使用命名空间隔离的引擎,但例如:

module MyEngine
  class ApplicationController < ::ApplicationController
  end
end

所以,我可以在控制器上使用load_and_authorize_resource(必须指定模型类名)和'can'帮助器。我必须在主应用程序中写入能力的所有能力(来自引擎的模型必须是命名空间)。这不是一个好方法。我想在这个引擎中指定引擎的能力,但是没有创建新的能力对象。 我怎样才能做到这一点?有什么想法吗?

1 个答案:

答案 0 :(得分:2)

它不是非常漂亮,但我做了类似于我正在写的Rails应用程序。我在这个名为FormX的应用程序中编写了自己的引擎,这是一种形式的CMS引擎。我希望用户能够仅编辑对表单的某些响应,并且只有一些用户能够创建表单。

鉴于我在Form命名空间中有Formx模型,我可以使用ability.rb语法在我的MainApp Formx::Form文件中定义功能。

实施例

can :manage, Formx::Form

然后在我的控制器中,我不得不在每个操作中手动放置authorize!个调用,因为我无法让load_and_authorize_resource在引擎的命名空间内工作。