rails应用程序和成员资格访问选项的最佳方法

时间:2013-09-21 19:03:59

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我想看看这里的社区建议最佳方法。我现在有了我的应用程序,用户有plan_id,所以plan_id =“1”将是试用版或免费版,plan_id =“2”将是订阅计划版。现在我的控制器检查两件事,1。)plan_id如果它的1或2 ...... 2.)如果在免费计划中,检查他们在DB中保存的帖子数量和3.)如果在免费计划检查他们拥有的类别数量。

我希望将用户限制为帖子和类别的数量,如果他们达到了这个限制,他们必须订阅无限计划=计划2。

现在我也在看Cancan或Easy_Roles,但在我的情况下,我不确定它会起作用。

我应该继续使用我的解决方案吗?或改变它并实施Cancan或Easy_roles?我正在寻找建议。

谢谢,

1 个答案:

答案 0 :(得分:0)

如果您愿意,您应该可以使用CanCan。设置它的方法是以下列方式定义能力(未经测试的代码,但你明白了):

class Ability
  include CanCan::Ability

  def initialize(user)        
    can :manage, :all

    cannot :create, Post do |p|
      user.plan_id == 1 and user.posts.count > X
    end

    cannot :create, Category do |c|
      user.plan_id == 1 and user.categories.count > Y
    end
  end
end

这样做的缺点是,当用户未获得授权时,会抛出一般异常并且您不知道它被抛出的原因。因此,当您处理它时,您必须再次检查:

rescue_from CanCan::AccessDenied do |exception|
  if user.plan_id == 1 and user.posts.count > X
    render 'too_many_posts'
  elsif user.plan_id == 1 and user.categories.count > Y
    render 'too_many_categories'
  else
    ...
  end
end
在检入控制器时

或在消息中传递它:

authorize! :create, Post, :message => "Unable to create so many posts"