gpt4 book ai didi

ruby-on-rails - 了解如何使用 Pundit

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:59 26 4
gpt4 key购买 nike

我一直在努力思考策略的概念,这看起来很简单——策略是一组规则,据此确定对系统权限和资源的访问。

足够简单。

因此,为了让系统内的用户访问该系统内所有其他用户的列表,他们需要必要的凭据(例如,可能是管理员或只是以注册用户身份登录用户)。我什至在最基本的层面上都在努力理解如何实际使用 Pundit 来实现这一目标。与我试图学习的许多开源软件的文档一样,Pundit 文档似乎充其量只是暗示该工具应该如何工作,但没有提供一个完整而具体的示例,甚至连基本的用例。我在这里寻找的只是一个“hello world”示例,因此我不会花三四天的时间自己拼凑一个困惑且半工作的实现来处理这么小的事情。此外,Pundit 提供的示例只会让事情变得更糟。

我基本上创建了一个测试应用程序,它尝试结合使用 Devise(我似乎理解并且能够很好地使用它)和 Pundit。到目前为止:

  • 用户可以在网站上注册。
  • 用户可以登录和注销。

现在,我想做的——这是非常基本的事情,可能不应该让我这么快就皱眉——是根据用户是否登录来限制用户对用户索引页面的访问进入系统,我完全卡在了这里。

到目前为止我尝试了什么?

  • 我已经按照文档安装了 Pundit。
  • 我已将 Pundit 包含在我的 application_controller.rb 中
  • 我生成了一个用户策略,如下所示:

    class UserPolicy < ApplicationPolicy
    class Scope < Scope
    puts "Inside UserPolicy scope."
    attr_reader :user

    def initialize(user)
    @user = user
    end

    def index
    puts "You've hit the index."
    end

    def resolve
    scope
    end
    end
    end


    class UsersController < ApplicationController
    before_filter :authenticate_user!
    after_action :verify_authorized
    def index
    @users = User.all
    authorize current_user
    end
    end

此时,我完全不知道如何关联这两者——UserPolicy 类和 UsersController。

我似乎至少能够将消息“Inside UserPolicy scope”打印到我的控制台。但否则只会在浏览器中看到以下错误消息:

“不允许索引?这个#”

我缺少什么,如果没有别的,我自己的知识差距在哪里,这使得这个和其他与 Rails 相关的工具如此难以学习?我是一名专业的软件工程师(从历史上看,我一直是一名前端工程师,并且在过去的几年里一直致力于成为一名全栈工程师),但我发现自己经常被开放所困——像这样的源工具。

最佳答案

您的实现存在一些问题:

  1. 操作授权(例如 index?)进入父 UserPolicy 类,而不是内部 Scope 类。
  2. 授权调用的结果需要返回truefalse。您的 index? 调用返回 puts "You've hit the index.",计算结果为 nil
  3. 根据用户是否登录来控制访问是身份验证,而不是授权。 Pundit 应仅在用户通过身份验证后接管。

关于ruby-on-rails - 了解如何使用 Pundit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30835327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com