La gema CanCan ya no se mantiene . Utilice otra biblioteca de autorización como CanCanCan o Pundit.
<img src=“https://fury-badge.herokuapp.com/rb/cancan.png” alt=“Versión Gem” /> <img src=“https://secure.travis-ci.org/ryanb/ cancan.png?branch=master” /> <img src=“https://codeclimate.com/github/ryanb/cancan.png” />
Wiki | RDocumentos | Screencast
CanCan es una biblioteca de autorización para Ruby on Rails que restringe a qué recursos puede acceder un usuario determinado. Todos los permisos se definen en una única ubicación (la clase Ability
) y no se duplican entre controladores, vistas y consultas de bases de datos.
En Rails 3 , agregue esto a su Gemfile y ejecute el comando bundle
.
joya "cancán"
En Rails 2 , agregue esto a su archivo Environment.rb.
configuración . joya "cancán"
Alternativamente, puedes instalarlo como un complemento.
Instalación del complemento Rails en git://github.com/ryanb/cancan.git
CanCan espera que exista un método current_user
en el controlador. Primero, configure alguna autenticación (como Authlogic o Devise). Consulte Cambiar valores predeterminados si necesita un comportamiento diferente.
Los permisos de usuario se definen en una clase Ability
. CanCan 1.5 incluye un generador Rails 3 para crear esta clase.
rieles g cancan: habilidad
En Rails 2.3, simplemente agregue una nueva clase en 'app/models/ability.rb` con el siguiente contenido:
habilidad de clase incluir CanCan :: Habilidad def inicializar ( usuario ) fin fin
Consulte Definición de habilidades para obtener más detalles.
Los permisos del usuario actual se pueden verificar usando el can?
y cannot?
métodos en la vista y el controlador.
<% si se puede? :actualización, @artículo %> <%= link_to "Editar", edit_article_path(@artículo) %> <% final %>
Consulte Comprobación de habilidades para obtener más información.
¡La authorize!
El método en el controlador generará una excepción si el usuario no puede realizar la acción dada.
definitivamente espectáculo @artículo = Artículo . buscar ( parámetros [ :id ]) ¡autorizar! :leer , @artículo fin
Configurar esto para cada acción puede ser tedioso, por lo tanto, se proporciona el método load_and_authorize_resource
para autorizar automáticamente todas las acciones en un controlador de recursos de estilo RESTful. Utilizará un filtro anterior para cargar el recurso en una variable de instancia y autorizarlo para cada acción.
clase ArtículosController < AplicaciónController cargar_y_autorizar_recurso definitivamente espectáculo # @article ya está cargado y autorizado fin fin
Consulte Autorización de acciones del controlador para obtener más información.
Si la autorización del usuario falla, se generará una excepción CanCan::AccessDenied
. Puede detectar esto y modificar su comportamiento en ApplicationController
.
clase ApplicationController < ActionController :: Base rescate_de CanCan :: Acceso denegado hacer | excepción | redirigir_a root_url , :alerta => excepción . mensaje fin fin
Consulte Manejo de excepciones para obtener más información.
Si desea asegurarse de que la autorización se realice en cada acción de su aplicación, agregue check_authorization
a su ApplicationController.
clase ApplicationController < ActionController :: Base comprobar_autorización fin
Esto generará una excepción si no se realiza la autorización en una acción. Si desea omitir esto, agregue skip_authorization_check
a una subclase de controlador. Consulte Garantizar autorización para obtener más información.
Actualizando a 1.6
Definición de habilidades
Comprobando habilidades
Autorización de acciones del controlador
Manejo de excepciones
Cambiar los valores predeterminados
Ver más
Si tiene algún problema con CanCan para el cual no puede encontrar la solución en la documentación, agregue un problema en GitHub o bifurque el proyecto y envíe una solicitud de extracción.
Para ejecutar las especificaciones, debe llamar bundle
y luego rake
. Consulte las especificaciones/README para obtener más información.
CanCan se inspiró en declarative_authorization y aegis. También muchas gracias a los colaboradores de CanCan. Consulte el REGISTRO DE CAMBIOS para obtener la lista completa.