2011-01-19 8 views
8

A tienen varios controladores con el espacio de nombres Admin. Quiero restringir el acceso a estos a menos que el usuario sea un administrador. ¿Hay alguna manera de hacer esto usando CanCan sin tener que llamar sin autorización! en cada método de cada controlador?Autorización de administración con CanCan

Respuesta

8

Agregue un controlador de aplicación a su espacio de nombre y un filtro anterior al mismo.

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 
0

ahora rails_admin tiene soporte completo con Cancan, usted lo puede encontrar en su sitio web oficial, hay una página wiki para este tema:

Rails Admin's authorization with CanCan:

+0

¿Mencionó rails_admin? –

+0

sí, tienes razón, no mencionó rails_admin. No sugiero usar rails_admin ya que no es tan bueno como pensaba. –

1

La página Admin Namespaces wiki para las listas CanCan a cabo varias soluciones a este problema.

  • Como @mark sugirió, tenga un controlador base para administradores que verifique la autorización para cada acción.
    • Puede que no necesite usar CanCan en absoluto para esto si todo lo que necesita es verificar que los usuarios tengan una bandera admin .
  • Para el manejo de los administradores de manera diferente el uno del otro (a diferencia de forma diferente a los usuarios regulares solamente), consideran una clase separada AdminAbility (esto es un poco fuera de tema, pero podría resultar relevante).
Cuestiones relacionadas