我已经在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
答案 0 :(得分:0)
使用load_and_authorize_resource
时,它会在authorize!(:our_miles_balance, @account)
控制器操作之前调用our_miles_balance
。 Documentation.
添加
can :our_miles_balance, Account
到你的能力课程。
在控制器中执行
load_and_authorize_resource :except => :our_miles_balance
并在our_miles_balance
操作中执行
authorize! :read, @account