情况: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 中,但它看起来真的很简单,可以从头开始实现。
关于ruby-on-rails - 授权的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16590347/