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

AGirlThatCodes

因此,我正在尝试使用gem pundit。我只是想弄清楚如何为用户和管理员提供索引视图。我想为管理员呈现所有结果,而仅为用户呈现相关帖子。我已经在github上进行了搜索和搜索,但是没有找到任何运气。我必须在策略和控制器中添加什么?

原始码

class PostsPolicy
   attr_reader :current_user, :model

  def initialize(current_user, model)
    @current_user = current_user
    @post = model
  end

  def index?
    @current_user.admin?
  end
end

控制器

class PostsController < ApplicationController
  before_filter :load_user
  before_filter :authenticate_user!
  after_action :verify_authorized

  def index
    @posts = Post.order('title').page(params[:page]).per(25)
    authorize User
  end

private

  def load_user
    @user = User.find_by_id(params[:user_id])
  end

end

第二次更新

class PostsPolicy
 class Scope
  attr_reader :user, :scope

  def initialize(user, scope)
     @user = user
     @scope = scope
  end

  def resolve
    if user.admin?
      scope.all
    else
      scope.where(user: user)
    end
   end

  end

end

控制器

class PostsController < ApplicationController
  before_filter :load_user
  before_filter :authenticate_user!
  after_action :verify_authorized

 def index
   @posts = policy_scope(Post).order('title').page(params[:page]).per(25)
   authorize User
 end

private

 def load_user
   @user = User.find_by_id(params[:user_id])
 end
end

第三次更新

class PostPolicy

   class Scope
    attr_reader :user, :scope

      def initialize(user, scope)
         @user = user
         @scope = scope
      end

      def resolve
        if user.admin?
          scope.all
        else
          scope.where(user: user)
        end
      end
   end

  def index?
   user.admin? || user.posts.count > 0
  end
end

控制器

class PostsController < ApplicationController
  before_filter :load_user
  before_filter :authenticate_user!
  after_action :verify_authorized

 def index
   @posts = policy_scope(Post).order('title').page(params[:page]).per(25)
   authorize User
 end

private

 def load_user
   @user = User.find_by_id(params[:user_id])
 end

end

**使用工作代码的最终更新**

class PostPolicy
attr_reader :user, :model

def initialize(user, model)
  @user = user
  @post = model
end

   class Scope
    attr_reader :user, :scope

      def initialize(user, scope)
         @user = user
         @scope = scope
      end

      def resolve
        if user.admin?
          scope.all
        else
          scope.where(user: user)
        end
      end
   end

  def index?
   user.admin? || user.posts.count
  end
end

控制器

class PostsController < ApplicationController
  before_filter :load_user
  before_filter :authenticate_user!
  after_action :verify_authorized

 def index
   @posts = policy_scope(Post).order('title').page(params[:page]).per(25)
   authorize Post
 end

private

 def load_user
   @user = User.find_by_id(params[:user_id])
 end

end
诺亚·科赫(Noah Koch)

您正在寻找的是一个范围:

class PostsPolicy
  class Scope
    attr_reader :user, :scope

    def initialize(user, scope)
       @user = user
       @scope = scope
    end

    def resolve
      if user.admin?
        scope.all
      else
        scope.where(user: user)
      end
    end
  end
end

然后在您的控制器中

def index
  @posts = policy_scope(Post).order('title').page(params[:page]).per(25)
  authorize User
end

编辑

附带说明,authorize User从长远来看可能不会很好地为您服务。本质上,您正在创建需要服务于每个索引的索引策略。如果您想授权索引页的可见性,您仍然可以在策略中执行以下操作:

def index?
  user.admin? || user.posts.count > 0
end

假设已建立关系,那么您将authorize Post在policy_scope之前调用索引控制器。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

导入用户和管理员的csv文件,然后通过电子邮件向管理员发送其用户列表的最佳方法

来自分类Dev

只让管理员管理用户的简单方法

来自分类Dev

管理员和普通用户使用相同Auth方法时的用户冲突| Firebase身份验证

来自分类Dev

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

来自分类Dev

Django Extend管理员索引

来自分类Dev

Django Extend管理员索引

来自分类Dev

允许django用户登录管理员并创建新用户的干净方法?

来自分类Dev

有什么方法可以从Windows 7中的受限用户帐户启用管理员帐户?

来自分类Dev

无法登录Active Admin。有什么方法可以创建管理员用户?

来自分类Dev

作为Kubernetes管理员,处理kubectl的用户身份验证的最佳方法是什么?

来自分类Dev

有什么方法可以从其他用户管理员那里阅读 Facebook 评论?

来自分类Dev

以管理员身份运行应用程序时,有什么方法可以获取非管理员用户名

来自分类Dev

管理员和用户的Laravel路由

来自分类Dev

管理员和用户登录表格

来自分类Dev

为什么允许非管理员用户访问我在 Rails 应用中的索引页?(设计宝石)

来自分类Dev

在php中同步管理员和客户端时间的最佳方法

来自分类Dev

Rails应用程序:仅拥有管理员用户,无其他用户的最佳方法

来自分类Dev

有普通用户隔离但管理员用户可以访问相同页面的好方法是什么?

来自分类Dev

Rails-活动管理员对索引页面进行分页

来自分类Dev

活动管理员索引页面根据条件隐藏列

来自分类Dev

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

来自分类Dev

未定义的方法“管理员?” 对于#<用户:0x007fccda8003c8>

来自分类Dev

Ubuntu,我需要在管理员帐户、终端或其他方法中访问标准用户文件

来自分类Dev

用户,管理员和超级管理员自定义Django

来自分类Dev

管理员与标准用户

来自分类Dev

使用装饰器或Mixin将字段添加到'readonly_fields'和'fields'Djnago管理员的通用方法

来自分类Dev

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

来自分类Dev

管理员和用户的不同页面[userfrosting 0.3.1]

来自分类Dev

如何以相同的形式登录管理员和用户

Related 相关文章

  1. 1

    导入用户和管理员的csv文件,然后通过电子邮件向管理员发送其用户列表的最佳方法

  2. 2

    只让管理员管理用户的简单方法

  3. 3

    管理员和普通用户使用相同Auth方法时的用户冲突| Firebase身份验证

  4. 4

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

  5. 5

    Django Extend管理员索引

  6. 6

    Django Extend管理员索引

  7. 7

    允许django用户登录管理员并创建新用户的干净方法?

  8. 8

    有什么方法可以从Windows 7中的受限用户帐户启用管理员帐户?

  9. 9

    无法登录Active Admin。有什么方法可以创建管理员用户?

  10. 10

    作为Kubernetes管理员,处理kubectl的用户身份验证的最佳方法是什么?

  11. 11

    有什么方法可以从其他用户管理员那里阅读 Facebook 评论?

  12. 12

    以管理员身份运行应用程序时,有什么方法可以获取非管理员用户名

  13. 13

    管理员和用户的Laravel路由

  14. 14

    管理员和用户登录表格

  15. 15

    为什么允许非管理员用户访问我在 Rails 应用中的索引页?(设计宝石)

  16. 16

    在php中同步管理员和客户端时间的最佳方法

  17. 17

    Rails应用程序:仅拥有管理员用户,无其他用户的最佳方法

  18. 18

    有普通用户隔离但管理员用户可以访问相同页面的好方法是什么?

  19. 19

    Rails-活动管理员对索引页面进行分页

  20. 20

    活动管理员索引页面根据条件隐藏列

  21. 21

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

  22. 22

    未定义的方法“管理员?” 对于#<用户:0x007fccda8003c8>

  23. 23

    Ubuntu,我需要在管理员帐户、终端或其他方法中访问标准用户文件

  24. 24

    用户,管理员和超级管理员自定义Django

  25. 25

    管理员与标准用户

  26. 26

    使用装饰器或Mixin将字段添加到'readonly_fields'和'fields'Djnago管理员的通用方法

  27. 27

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

  28. 28

    管理员和用户的不同页面[userfrosting 0.3.1]

  29. 29

    如何以相同的形式登录管理员和用户

热门标签

归档