是否可以在一定时间后自动更改用户帐户角色(使用Cancan)?

时间:2011-08-30 15:32:00

标签: ruby-on-rails time cancan

在应用程序中,我使用户可以拥有一个帐户,每个帐户可以是免费的或高级的(使用角色和Cancan gem)。

我希望能够将免费帐户升级为高级角色并选择一个持续时间,例如2个月,然后在2个月后,帐户会自动恢复为免费角色。

这可能吗?

1 个答案:

答案 0 :(得分:1)

您应该可以使用像Resque或Delayed Job这样的后台作业系统来解决这个问题。

您可以创建一份每晚审核所有免费帐户的工作,并检查升级时间戳,并在免费试用期满后还原该角色。

以下是Account.revoke_expired_premium_roles()助手的外观示例,您可以在夜间后台作业或cron任务中调用:

class Account < ActiveRecord::Base
  # assumes Timestamp field trial_expires_at set to 2.months.from_now by default on trial start
  named_scope :trial_expired, lambda {{ :conditions => ['trial_expires_at <= ?', Time.now] }}

  def self.revoke_expired_premium_roles
    trial_expired.find_each {|account| account.revoke_premium_role}
  end

  def revoke_premium_role
    # Remove can-can authorization here
  end
end