0

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

module MyEngine
  class ApplicationController < ::ApplicationController
  end
end

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

4

1 回答 1

2

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

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

前任。

can :manage, Formx::Form

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

于 2012-08-22T00:56:01.270 回答