ruby-on-rails - 授权的最佳做法是什么?

标签 ruby-on-rails ruby-on-rails-3.2 authorization

情况:rails 3.2 应用有一个演示期,之后用户必须开始为该服务付费。

问题:如果用户没有添加支付方式,或者没有选择支付计划,那么限制用户访问网络应用“付费”部分的推荐方法是什么?

我需要按如下方式对用户进行排序的东西:

if user.admin? || user.in_demo || user.has_all_payment_data
  # carry on
elsif user.should_add_payment_method
  # send them to add payment method page
elsif user.should_choose_plan
  # send them to add plan
else
  # redirect to home page or whatever
end

我从应用程序 Controller 上的 before_filter 开始,它检查每个请求的用户支付状态并相应地重定向它们(在主页/个人资料编辑等地方跳过它)。 ),但我认为必须有更好的方法,因为它正在迅速变得太复杂,并且在应用程序 Controller 中拥有所有这些复杂性感觉是不对的。我一直在查看 cancan 等用户角色库,但找不到合适的内容。

最佳答案

Jonas Nicklas(Capybara 和 CarrierWave 的创建者)在一篇文章中详细解释了如何采用比 CanCan 更简单的方法。他的方法基于一个额外的纯 Ruby 类,用于您要为其创建授权规则的每个模型。

Simple authorization in Ruby on Rails apps (Elabs blog)

他们将该解决方案卸载到一个名为 Pundit 的 gem 中,但它看起来真的很简单,可以从头开始实现。

Pundit gem (GitHub)

关于ruby-on-rails - 授权的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16590347/

相关文章:

ruby-on-rails - 如何在现有 Rails 应用程序中使用 gRPC

ruby-on-rails - 如何禁用cucumber/rails的database_cleaner?

ruby-on-rails-3.2 - simple_captcha 中的 "translation missing"

asp.net-mvc - ASP.NET MVC 安全模型/数据库 - 我有哪些选择?

javascript - 隐藏所有未选中的列表元素,Ruby 或 JavaScript

javascript - Algolia 搜索 : access results onclick

ruby-on-rails - Rails 嵌套模型/JSON 请求构造困惑

ruby-on-rails - Rails 3.2 打破了我的 cucumber

http - 将用户的权限存储在 JWT 声明中或在每次请求时在服务器上检查它是否更有效?

iOS:为某些 View Controller 显示相同的 "Please sign-in"屏幕,然后将其更改为真实内容?