- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建、更新和销毁“喜欢”的政策要求用户登录。
我已将政策措辞如下:
class LikePolicy < ApplicationPolicy
def create?
user && record.user_id == user.id
end
def update?
create?
end
def destroy?
create?
end
end
def create
@article = Article.find(params[:article_id])
@like = @article.likes.new(user_id: current_user.id, value: params[:value] == 1 : 1 ? -1)
authorize(@like)
@like.save
redirect_to @article
end
最佳答案
通常我会通过单独的身份验证检查来检查用户是否已登录。如果您的应用程序主要需要用户登录,那么在授权之前进行身份验证检查将确保您始终拥有 current_user
.
同样对于创建,我发现我不喜欢调用 new/authorize/save 只是为了确保用户正在创建一个属于他们的对象。那是与授权无关的应用程序逻辑。 Pundit 不介意,您可以简单地传入类,而不是创建。
根据您是否首先进行身份验证检查,您的授权可以简单地返回 true,或者您可以检查 !user.nil
.
我发现对 Pundit 有帮助的最后一件事是尝试将逻辑抽象为某种自我记录的方法。它使阅读权威政策更容易,还允许您将逻辑片段抽象到 ApplicationPolicy 或通过模块包含它们。在下面的示例中 is_owner?
可以很容易地抽象出来,因为它可以在许多情况下使用。
示例 1:先验证再授权
class LikesController
# Either from devise, or define in ApplicationController
before_action :authenticate_user!
def create
authorize(Like)
article = Article.find(params[:article_id])
article.likes.create(user_id: current_user.id, ...)
redirect_to article
end
end
class LikePolicy < ApplicationPolicy
def create?
true
end
def update?
is_owner?
end
def destroy?
is_owner?
end
private
def is_owner?
user == record.user
end
end
class LikesController
def create
authorize(Like)
article = Article.find(params[:article_id])
article.likes.create(user_id: current_user.id, ...)
redirect_to article
end
end
class LikePolicy < ApplicationPolicy
def create?
!user.nil?
end
def update?
is_owner?
end
def destroy?
is_owner?
end
private
def is_owner?
user && user == record.user
end
end
关于ruby-on-rails - Pundit 授权当前用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32430024/
我创建、更新和销毁“喜欢”的政策要求用户登录。 我已将政策措辞如下: class LikePolicy < ApplicationPolicy def create? user && re
我一直在努力思考策略的概念,这看起来很简单——策略是一组规则,据此确定对系统权限和资源的访问。 足够简单。 因此,为了让系统内的用户访问该系统内所有其他用户的列表,他们需要必要的凭据(例如,可能是管理
我已经阅读了关于同一主题的几个问题,但没有一个能解决我的疑问或对我有用。 Pundit 无法在我的代码中找到命名空间策略,但我不明白为什么。我有一个“后端”命名空间,每当调用此“后端”中的 items
将 Rails 4.2.4 与 Devise (3.5.2) 和 Pundit (1.0.1) 结合使用。 Decent_exposure (2.3.2)。 我有一个简单的 User 和 Idea 嵌
在我的项目中,我有非常常见的命名空间“admin”。 namespace :admin do resources :users, except: :show end 我使用 Pundit ge
我对 Rails 很陌生,但我对以下策略有疑问(使用 Pundit ):我想比较两个对象:@record和 @foo ,正如你在这里看到的: class BarPolicy < Application
我在我的 Rails 应用程序上使用 Pundit 进行授权,我正在对我的请求进行单元测试。 我已经成功测试了该策略,但现在我想验证我的请求是否使用了该策略。 我想以一种通用的方式来做,我可以在任何请
我刚刚开始在 Rails 4 应用程序中使用 Pundit gem 进行授权。 一切都很顺利,但我可以了解分页在索引操作中如何工作。 我的 Controller 的索引操作如下所示: def inde
我刚刚开始在 Rails 4 应用程序中使用 Pundit gem 进行授权。 一切都很顺利,但我可以了解分页在索引操作中如何工作。 我的 Controller 的索引操作如下所示: def inde
我正在为我的学校作业授权,这是一个 Reddit 克隆。我刚刚被介绍给 Pundit Gem,用于对用户角色进行授权,即管理员、版主、成员和访客。 我必须这样做: Admins and Moderat
我通过连接表将用户与给定公司相关联,因为我需要能够让每个公司都有大量用户,反之亦然。 class User has_many :firm_connections, dependent: :dest
所以我决定尝试pundit用户授权解决方案。我想知道如何在实例变量可能为 nil 的情况下使用 policy 助手,如下面的简单情况: 应用/views/projects/index.html.sli
在一个练习中,我试图创建授权,这样用户就需要是帖子的所有者或一般管理员,除了在场并登录才能更新帖子。我正在尝试实现 pundit策略(使用 Devise 进行身份验证)。 PostController
我在我的封闭系统 Ruby on Rails 应用程序(使用 Rails 4.1.5 和 Rspec 3.0)上使用 Pundit gem 进行授权 我已将我的应用程序策略配置为在未按照 Pundit
工具 Pundit授权;试验 this pull request链接到官方 Pundit 自述文件; ActiveInteraction域服务对象(“DSO”); RSpec 2.99.1 ** 项目
我对使用这个 Pundit gem 还很陌生,但似乎无法理解政策系统。我添加了检查 Pundit 已被调用以进行授权 ( verify_authorized ) 和范围界定 ( verfify_pol
我试图弄清楚如何将 Pundit 与我的命名空间资源一起使用。 我读过很多其他人的帖子,说他们对此有问题,但这些帖子早于关于专家 gem 问题跟踪器的讨论。问题跟踪器不清楚解决方案是什么 - 所以我被
我正在使用 Rails 5.2、Pundit 1.1 和 rails_admin 1.2 我的 application_controller.rb 中有以下内容: class ApplicationC
Pundit 的 authorize 有 3 个参数,但在 Controller 中你只需要传递 2 个参数,current_user 会自动传递。 current_user 是如何传递的?我查看了
在带有 activeadmin gem(当前主分支)的 Rails 4 应用程序中,我使用 Pundit 进行授权。它适用于资源,但我无法使其适用于页面。 例如: ActiveAdmin.regist
我是一名优秀的程序员,十分优秀!