我想看看这里的社区建议最佳方法。我现在有了我的应用程序,用户有plan_id,所以plan_id =“1”将是试用版或免费版,plan_id =“2”将是订阅计划版。现在我的控制器检查两件事,1。)plan_id如果它的1或2 ...... 2.)如果在免费计划中,检查他们在DB中保存的帖子数量和3.)如果在免费计划检查他们拥有的类别数量。
我希望将用户限制为帖子和类别的数量,如果他们达到了这个限制,他们必须订阅无限计划=计划2。
现在我也在看Cancan或Easy_Roles,但在我的情况下,我不确定它会起作用。
我应该继续使用我的解决方案吗?或改变它并实施Cancan或Easy_roles?我正在寻找建议。
谢谢,
答案 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"