Авторизация администратора с помощью CanCan - PullRequest
8 голосов
/ 19 января 2011

A имеет несколько контроллеров с пространством имен Admin. Я хочу ограничить доступ к ним, если пользователь не является администратором. Есть ли способ сделать это с помощью CanCan без необходимости звонить несанкционированным! в каждом методе каждого контроллера?

Ответы [ 3 ]

8 голосов
/ 19 января 2011

Добавьте контроллер приложения в ваше пространство имен и фильтр до него.

class ApplicationController < ActionController::Base
end

class Admin::ApplicationController < ApplicationController 
  # these goes in your namespace admin folder
  before_filter :check_authorized

  def check_authorized
    redirect_to root_path unless can? :admin, :all
  end
end

class SomeadminController < Admin::ApplicationController
   def some_action
     # do_stuff
   end
end
1 голос
/ 31 июля 2012

На странице Admin Namespace в вики для CanCan перечислено несколько решений этой проблемы.

  • Как предложил @mark, имейте базовый контроллер для администраторов, который проверяет авторизацию для каждого действия.
    • Вам может вообще не понадобиться использовать CanCan, если все, что вам нужно, это проверить, есть ли у пользователей admin флаг.
  • Для работы с администраторами по-разному (в отличие от обычных пользователей), рассмотрим отдельный класс AdminAbility (это немного не по теме, но может оказаться актуальным).
0 голосов
/ 14 марта 2012

Теперь rails_admin полностью поддерживает Cancan, вы можете найти его на официальном сайте, есть вики-страница по этой теме:

Авторизация Rails с помощью CanCan :

...