13

工具

  1. 权威人士授权;尝试与官方 Pundit README 链接的这个拉取请求;
  2. ActiveInteraction域服务对象(“DSO”);
  3. RSpec 2.99.1

** 该项目**

项目 repo 在 Github;这里要审查的是在pundit-1树枝上。

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

到目前为止一切都很好。然后我们来到SessionController,其#new#destroy动作分别控制登录和注销..

当前代码规范使用传统的控制器逻辑工作得很好(请参阅如何#new调用使用 Pundit 的私有方法SessionDataPolicy来使用.

然后我尝试将该逻辑封装在ActiveInteraction DSO中(请参阅 中注释掉的代码SessionsController#new),然后一切都变得松散了。

更具体地说,这个 GistSessionsController中的规范版本在规范调用方法的地方提出了 a 。Pundit::AuthorizationNotPerformedError#new

威士忌酒。探戈。狐狸?!?!?

有没有能够在没有Pundit 直接居住在控制器代码中的情况下获得类似的代码,最好使用@billychan 的拉取请求(更好的替代品将不胜感激)?

这让我完全摸不着头脑。

4

2 回答 2

1

Pundit::AuthorizationNotPerformedError#verify_authorized由于基本上检查@_pundit_policy_authorized变量的方法而引发。

您可以为不需要它的控制器关闭验证。

UPD。并再次发布。我需要更加注意日期:\

于 2018-07-30T14:53:20.720 回答
0

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

Struct.new(:user)

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

于 2017-10-26T08:17:46.350 回答