如何检查用户是否具有CanCanCan的订阅

时间:2016-03-21 01:55:12

标签: ruby-on-rails cancan subscriptions cancancan

我正在使用Koudoku gem构建订阅网站,并尝试使用Cancancan阻止对我的课程内容的授权,直到注册用户订阅,但我在设置ability.rb文件时遇到问题。使用设计也是如此。我想保留课程:显示操作被阻止,直到用户购买订阅。我能够锁定课程,但无法提供语言为订阅者解锁。

认为这会起作用,但没有骰子。

@subscription.user_id == current_user.id     

我需要将哪些代码插入ability.rb才能使其正常工作?

以下是我的lessons_controller.rb

的摘录
class LessonsController < ApplicationController
before_action :set_lesson, only: [:show, :edit, :update, :destroy]
before_filter :authenticate_user!

def show
 @subscriptions = Subscription.all
 authorize! :read, @lesson
end

订阅架构如下所示:

create_table "subscriptions", force: :cascade do |t|
t.string   "stripe_id"
t.integer  "plan_id"
t.string   "last_four"
t.integer  "coupon_id"
t.string   "card_type"
t.float    "current_price"
t.integer  "user_id"
t.datetime "created_at",    null: false
t.datetime "updated_at",    null: false
end

用户架构:

create_table "users", force: :cascade do |t|
t.string   "email",                  default: "", null: false
t.string   "encrypted_password",     default: "", null: false
t.string   "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer  "sign_in_count",          default: 0,  null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string   "current_sign_in_ip"
t.string   "last_sign_in_ip"
t.datetime "created_at",                          null: false
t.datetime "updated_at",                          null: false
t.string   "first_name"
t.string   "string"
t.string   "last_name"
end

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

只是想出来以防万一有人想知道。我将current_user更改为just user并添加了用户|| = User.new

这是ability.rb代码:

def initialize(user)
 user ||= User.new

 if Subscription.exists?(:user_id => user.id)
    can :read, Lesson 
 else 
    false
 end
end