0

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

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

现在我也在看 Cancan 或 Easy_Roles,但就我而言,我不确定这是否可行。

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

谢谢,

4

1 回答 1

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"
于 2013-09-21T20:03:43.513 回答