使用服务对象的权威授权

时间:2014-07-22 07:07:09

标签: ruby-on-rails ruby rspec authorization pundit

工具

  1. Pundit授权;尝试使用官方Pundit自述文件链接的this pull request;
  2. ActiveInteraction域服务对象(“DSO”);
  3. RSpec 2.99.1
  4. **项目**

    项目回购在Github;这里受到审查的是pundit-1 branch

    我遵循Pundit教程并使用“传统”胖乎乎的控制器获得授权;见

    到目前为止一切顺利。然后我们来到SessionController,其#new#destroy操作分别管理登录和退出..

    使用传统控制器逻辑current codespec工作正常(请参阅使用Pundit授权活跃(当前)用户的#new调用private methods的方法一个SessionDataPolicy

    然后我尝试将该逻辑封装在ActiveInteraction DSO中(参见SessionsController#new中的commented-out code),并且所有地狱都破裂了。

    更具体地说,SessionsController规范in this Gist的版本会在规范调用Pundit::AuthorizationNotPerformedError方法的位置引发#new

    威士忌。探戈。 FOX?!?!?

    任何人能够获得类似的代码没有 Pundit直接居住在控制器代码中,理想情况下使用@billychan's pull request(一个更好的替代品将感激不尽)?

    这让我完全 flummoxed。

2 个答案:

答案 0 :(得分:1)

Pundit::AuthorizationNotPerformedError的出现是因为#verify_authorized方法基本上是在检查@_pundit_policy_authorized变量。

您只需为不需要的控制器关闭验证。

UPD。并再次进行尸检。我需要更加注意日期:\

答案 1 :(得分:0)

您可以在DSO级别创建HeadLess策略,如

Struct.new(:user)

然后验证用户的方法授权。