工具
**项目**
项目回购在Github;这里受到审查的是pundit-1
branch。
我遵循Pundit教程并使用“传统”胖乎乎的控制器获得授权;见
PostsController#new
action和its spec; ApplicationPolicy
class;和PostDataPolicy
管理帖子的Rails模型实例的授权。到目前为止一切顺利。然后我们来到SessionController
,其#new
和#destroy
操作分别管理登录和退出..
使用传统控制器逻辑current code和spec工作正常(请参阅使用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。
答案 0 :(得分:1)
Pundit::AuthorizationNotPerformedError
的出现是因为#verify_authorized
方法基本上是在检查@_pundit_policy_authorized
变量。
您只需为不需要的控制器关闭验证。
UPD。并再次进行尸检。我需要更加注意日期:\
答案 1 :(得分:0)
您可以在DSO级别创建HeadLess策略,如
Struct.new(:user)
然后验证用户的方法授权。