Devise / Cancan Signout User On Действие контроллера - PullRequest
0 голосов
/ 05 марта 2012

Я реализовал Devise для аутентификации и авторизации в приложении ROR, все выглядит нормально, но возникает одна проблема.У меня есть два модальных режима: «Учетная запись» и «Транзакция», и, соответственно, два контроллера.

В представлении «Мой индекс транзакций» вызывается один из методов контроллера аккаунта, подобный этому

$.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

И контроллер аккаунта

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 голосов
/ 05 марта 2012

При использовании load_and_authorize_resource он вызывает authorize!(:our_miles_balance, @account) перед действием контроллера our_miles_balance. Документация.

Вариант 1

Добавить

can :our_miles_balance, Account

к вашему классу способностей.

Вариант 2

В контроллере сделать

load_and_authorize_resource :except => :our_miles_balance

и в действии our_miles_balance сделайте

authorize! :read, @account
...