Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

А Административные пространства имен Страница Wiki для Cancan перечисляет несколько решений этой проблемы.

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

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

Авторизация администратора Rails с Cancan:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top