使用 Pundit 拒绝用户的管理员视图

顺德

我有一个管理员视图,只有管理员可以查看。我正在使用专家来授权应用程序。

如何在不为每个管理控制器创建策略(并使用 authorize 装饰每个控制器)的情况下拒绝除 admin 之外的所有用户访问管理视图?如果有更短的解决方案。

谢谢

最大限度

您尝试做的事情违反了 MVC 的性质,是一个非常糟糕的主意。

虽然您可以在视图中授权:

# In views
<% if policy(:dashboard).show? %>
  <%= link_to 'Dashboard', dashboard_path %>
<% end %>

那是为了授权视图​​的块而不是整个操作。

这样做的原因是像 Pundit 这样的授权系统通过引发异常来工作,该异常在控制器中被捕获以呈现“错误”页面或重定向。未经授权的操作还应返回不同的 HTTP 响应代码。在视图已经开始呈现时执行此操作是响应周期的后期,并且会导致双重呈现错误,因为服务器可能已经开始发送响应。

相反,您可以创建无头策略:

class AdminPolicy < Struct.new(:user, :admin)
  def admin?
    user.admin?
  end 
end 

你可以像这样使用它:

# app/controllers/concerns/administrated.rb
module Administrated
  extends ActiveSupport::Concern

  included do
    before_action :authorize_admin
  end

  def authorize_admin
    authorize(:admin, :admin?)
  end
end

class ThingsController < ApplicationController
  include Administrated
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

管理员和用户的Pundit-索引方法

来自分类Dev

Rails-使用Pundit的基于角色的视图

来自分类Dev

使用Pundit的各种角色的索引视图限制

来自分类Dev

具有Rails的Pundit以及用户,管理员和角色模型

来自分类Dev

使用Django管理员创建的预先存在的用户连接用户登录视图,表单

来自分类Dev

管理员使用root @ localhost的“权限被拒绝”错误

来自分类Dev

管理员使用root @ localhost的“权限被拒绝”错误

来自分类Dev

在管理员视图外使用django-autocomplete-light

来自分类Dev

GitHub:如何使用户成为组织的管理员?

来自分类Dev

如何使管理员用户使用devise和cancan?

来自分类Dev

允许管理员使用Devise添加用户

来自分类Dev

使用FosUserBundle创建一个管理员用户

来自分类Dev

使用Sonata管理员导出用户角色

来自分类Dev

用户管理员-使用750在家时查看权限

来自分类Dev

使用symfony2以用户身份登录管理员

来自分类Dev

使用管理员用户登录到SAP失败

来自分类Dev

如何使用 Firebase 管理员查询 Firebase 用户?

来自分类Dev

任务运行 - 使用系统或管理员用户?

来自分类Dev

管理员用户登录使用 2 表 PhP

来自分类Dev

使用devise gem,我的管理员如何同时充当Rails4中的管理员和用户

来自分类Dev

不允许在WordPress中使用网络管理员普通用户管理员面板

来自分类Dev

使用CanCanCan或Pundit的字段级别权限

来自分类Dev

将searchkick与pundit结合使用:policyscope错误

来自分类Dev

使用pundit gem rails的授权设置

来自分类Dev

拒绝管理员用户访问

来自分类Dev

使用管理员权限删除拒绝删除的文件(Gamespy同志)

来自分类Dev

如何使用ACL9以管理员身份管理用户及其角色

来自分类Dev

使用单个管理员用户帐户将管理特权降级为标准

来自分类Dev

如何使用户在(管理员和用户)之间切换模式以进行评论/发布

Related 相关文章

  1. 1

    管理员和用户的Pundit-索引方法

  2. 2

    Rails-使用Pundit的基于角色的视图

  3. 3

    使用Pundit的各种角色的索引视图限制

  4. 4

    具有Rails的Pundit以及用户,管理员和角色模型

  5. 5

    使用Django管理员创建的预先存在的用户连接用户登录视图,表单

  6. 6

    管理员使用root @ localhost的“权限被拒绝”错误

  7. 7

    管理员使用root @ localhost的“权限被拒绝”错误

  8. 8

    在管理员视图外使用django-autocomplete-light

  9. 9

    GitHub:如何使用户成为组织的管理员?

  10. 10

    如何使管理员用户使用devise和cancan?

  11. 11

    允许管理员使用Devise添加用户

  12. 12

    使用FosUserBundle创建一个管理员用户

  13. 13

    使用Sonata管理员导出用户角色

  14. 14

    用户管理员-使用750在家时查看权限

  15. 15

    使用symfony2以用户身份登录管理员

  16. 16

    使用管理员用户登录到SAP失败

  17. 17

    如何使用 Firebase 管理员查询 Firebase 用户?

  18. 18

    任务运行 - 使用系统或管理员用户?

  19. 19

    管理员用户登录使用 2 表 PhP

  20. 20

    使用devise gem,我的管理员如何同时充当Rails4中的管理员和用户

  21. 21

    不允许在WordPress中使用网络管理员普通用户管理员面板

  22. 22

    使用CanCanCan或Pundit的字段级别权限

  23. 23

    将searchkick与pundit结合使用:policyscope错误

  24. 24

    使用pundit gem rails的授权设置

  25. 25

    拒绝管理员用户访问

  26. 26

    使用管理员权限删除拒绝删除的文件(Gamespy同志)

  27. 27

    如何使用ACL9以管理员身份管理用户及其角色

  28. 28

    使用单个管理员用户帐户将管理特权降级为标准

  29. 29

    如何使用户在(管理员和用户)之间切换模式以进行评论/发布

热门标签

归档