控制器动作的设计/康康登出用户

时间:2012-03-05 15:59:06

标签: ruby-on-rails devise cancan

我已经在ROR应用程序中实现了Devise for Authentication and Authorization,一切似乎都很好但是遇到了一个问题。 我有两个模式“帐户”和“Transactiona”,分别是两个控制器。

我的交易索引视图会像这样调用一个帐户控制器方法

$.post("accounts/our_miles_balance/?account_number="+$("#account_number").val(),function(data)
{
   $("#our_miles_balance").val(data);
});

当这个ajax发布后,它会出现以下错误并退出管理员用户

您需要先登录或注册才能继续

这是我的能力等级

class Ability
include CanCan::Ability

def initialize(user)
  user ||= User.new # guest user
  if user.role == 1 #admin
    can :manage, :all
    can :read, :all
  elsif user.role == 2 #Vendor
    can :manage, VendorTransaction
    can :index, Account
  end
end
end

我做错了什么,请帮忙......

修改

好这是我的交易控制器

require 'csv'
class TransactionsController < ApplicationController
load_and_authorize_resource
helper_method :sort_column, :sort_direction

respond_to :html, :js
def index
  per_page = 40
  @transactions = Transaction.search(params[:id]).order(sort_column + " " + sort_direction)

 respond_to do |format|
  format.html # index.html.erb
  format.csv { render :csv => @transactions}
end

AND帐户控制器

class AccountsController < ApplicationController
load_and_authorize_resource
helper_method :sort_column, :sort_direction
def index
   @accounts = Account.search(params[:program_id]
  respond_to do |format|
    format.html # index.html.erb
    format.json { render :json => @accounts}
 end

 def our_miles_balance
   a = Account.find_by_account_number(params[:account_number])
   @miles = Account.our_miles_balance(a.id) if ?a!=nil
    respond_to do |format|
     format.json { render json: @miles}
  end
end
end

1 个答案:

答案 0 :(得分:0)

使用load_and_authorize_resource时,它会在authorize!(:our_miles_balance, @account)控制器操作之前调用our_miles_balanceDocumentation.

选项1

添加

can :our_miles_balance, Account

到你的能力课程。

选项2

在控制器中执行

load_and_authorize_resource :except => :our_miles_balance

并在our_miles_balance操作中执行

authorize! :read, @account