Пользователю не отказано в доступе в Active Admin с использованием CanCan

Я использую адаптер авторизации Active Admin CanCan вместе с Rolify для управления авторизацией на сайте администратора. У меня есть модель company, та has_many :manuals, и еще одна модель, manuals, та has_many :parts.

Если пользователь не имеет доступа для чтения admin/manuals/1 и вводит его в адресную строку, он будет правильно перенаправлен и получит неавторизованное сообщение. Однако если пользователь введет admin/manuals/1/parts, ему не будет отказано в доступе. Они переходят на эту страницу, но все части скрыты от них. Они должны быть перенаправлены на панель управления с несанкционированным сообщением.

Вот моя конфигурация. Заранее спасибо за любой совет, который вы можете предложить.

config/routes.rb

ActiveAdmin.routes(self)

models/ability.rb

class Ability
  include CanCan::Ability

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

    can :read, ActiveAdmin::Page, :name => "Dashboard"

    if user.has_role? :admin
      can :manage, :all
    elsif user.has_role? :moderator
      can :manage, Part, :manual => { :company_id => user.company_id }
    else
      can :read, Part, :manual => { :company_id => user.company_id }
    end
  end
end

Я также перезаписал методы авторизации по умолчанию в controllers/application_controller.rb.

rescue_from CanCan::AccessDenied do |exception|
  redirect_to root_url, :alert => exception.message
end

def authenticate_admin_user!
  authenticate_user!
  unless user_signed_in?
    flash[:alert] = "You are not authorized to view this page"
    redirect_to root_path
  end
end

def current_admin_user #use predefined method name
  return nil unless user_signed_in?
  current_user
end

def after_sign_in_path_for(user)
  if current_user.has_role? :admin
    admin_dashboard_path
  elsif current_user.has_role? :moderator
    admin_manuals_path
  else
    company_path(user.company)
  end
end

person seancdavis    schedule 23.09.2013    source источник
comment
Эй, ты когда-нибудь понял это? Я нахожусь в точке, где я получаю ошибку protected method authorize!.   -  person Mike Vormwald    schedule 08.01.2014
comment
Я не. В итоге я получил так много глубоко вложенных маршрутов, что стало проще просто создать свою собственную админку.   -  person seancdavis    schedule 09.01.2014


Ответы (1)


Вы добавили метод load_and_authorize_resource в свой контроллер?

Нравится:

class SomeController < ApplicationController
  load_and_authorize_resource
  ...
end

Проверить возможности и авторизацию

person Hiasinho    schedule 23.09.2013
comment
добавление controller.load_and_authorize_resource или controller.authorize_resource в app/admin/parts.rb дает мне ошибку protected method authorize!. - person seancdavis; 23.09.2013