Permisos y Accesos con KanKan en Aplicaciones Rails
Clase 28 de 36 • Curso de Introducción a Ruby on Rails
Contenido del curso
- 6

Arquitectura MVC y Flujo de Peticiones en Rails
07:22 - 7

Creación y Configuración de Aplicaciones Web con Ruby on Rails
11:18 - 8

Creación de Rutas y Controladores en Ruby on Rails
10:15 - 9

Creación de Modelos y Migraciones en Ruby on Rails
13:12 - 10

Gestión de Credenciales Seguras en Ruby on Rails
11:57 - 11

Gestión de Assets y Layouts en Rails: Asset Pipeline y Webpacker
12:31 - 12

Uso del Generador Scaffold en Ruby on Rails
10:51 - 13

Migraciones y Consistencia de Modelos en Rails
05:57 - 14

Migración de Plantillas ERB a Haml en Ruby on Rails
08:47 - 15

Creación de Formularios Dinámicos con SimpleForm y Haml en Rails
12:19 - 16

Internacionalización de Aplicaciones Rails con i18n y i18n-tasks
09:29 - 17

Debugging en Ruby on Rails: Uso de Bybug y Pry
09:03
- 18

Desarrollo de un Sistema de Gestión de Tareas con Ruby on Rails
05:35 - 19

Diseño de Modelos de Datos para un Organizador de Tareas
05:46 - 20

Creación de Scaffolds y Modelos en Rails con SimpleFrame y Bootstrap
10:08 - 21

Internacionalización de Formularios en Rails con i18n y SimpleForm
11:03 - 22

Validaciones de Modelos en Ruby on Rails
10:42
- 23

Autenticación de Usuarios con Devise en Rails
11:42 - 24

Migración de Llave Foránea: Enlazar Tarea con Usuario en Rails
05:46 - 25

Integración Visual y Estructural en Rails: Usuario, Tarea y Participante
09:54 - 26

Manejo de Formularios Anidados con Cocoon en Rails
12:25 - 27

Formularios Dinámicos en Rails con Cocoon y Validaciones de Unicidad
09:36 - 28

Permisos y Accesos con KanKan en Aplicaciones Rails
14:13
- 29

Callbacks en Controladores y Modelos en Rails
08:59 - 30
Automatización de Inserción de Datos en Rails con db:seed
07:38 - 31

Envío de Correos con ActionMailer en Rails
13:25 - 32

Creación de notas dinámicas en tareas con Ruby on Rails
17:08 - 33

Inserciones Dinámicas de Notas con AJAX y SJR en Rails
09:12 - 34
Mejora de Interfaces con Bootstrap en Aplicaciones Rails
16:19
¿Cómo establecer reglas de acceso y permisos en una aplicación Rails?
En el desarrollo de aplicaciones web, no solo es necesario crear funcionalidades, sino también asegurar que cada usuario tenga acceso a las acciones y datos que le correspondan. En este contexto, surge la pregunta: ¿cómo evitar que un usuario modifique o acceda a recursos que no deberían ser de su dominio? Para ello, la gema KanKan ofrece una solución eficaz en el manejo de permisos y accesos personalizados en aplicaciones Rails. Este artículo te guiará en el proceso de implementación con esta herramienta.
¿Cómo integrar la gema KanKan en tu proyecto Rails?
Para empezar, es crucial integrar la gema KanKan en el archivo Gemfile. La siguiente línea debe añadirse debajo de la gema Cocoon:
gem 'cancancan'
Una vez añadida, es importante tener en cuenta que ciertas versiones de Rails y Ruby pueden generar conflictos con la configuración, concretamente con el precargador de la aplicación llamado Spring. Para evitar problemas durante el desarrollo, se sugiere comentar Spring, especialmente si no estás en un entorno de producción:
# gem 'spring'
Después de realizar estos cambios, ejecuta la instalación de la gema:
bundle install
¿Cómo definir reglas de acceso con KanKan?
Después de la instalación, KanKan ofrece un generador de Rails que crea un archivo de Ability. Este archivo es el corazón de las reglas de acceso en la aplicación:
rails generate cancan:ability
Dentro del archivo ability.rb, se definen las reglas de acceso. Por ejemplo, si queremos permitir que los usuarios solo gestionen sus propias tareas, lo configuramos así:
can :manage, Task, owner_id: user.id
¿Cómo se integra KanKan con los controladores?
Para asegurar que las reglas definidas se apliquen, las acciones del controlador deben validarse con el método load_and_authorize_resource. Por ejemplo, en el controlador de tareas, se integraría de la siguiente forma:
class TasksController < ApplicationController
load_and_authorize_resource
# resto del código del controlador
end
¿Qué hacer con las excepciones de acceso denegado?
KanKan arroja excepciones AccessDenied cuando un usuario intenta ejecutar una acción para la cual no tiene permiso. Podríamos manejar esas excepciones utilizando el ApplicationController, de modo que redirija a un lugar seguro en vez de mostrar un error:
class ApplicationController < ActionController::Base
rescue_from CanCan::AccessDenied do |exception|
redirect_to root_path, alert: exception.message
end
end
¿Cómo restringir la visualización de listas de recursos?
Para reducir la lista de tareas visibles solo a aquellas que el usuario tiene permiso de ver o gestionar, podemos modificar el método index del controlador:
def index
@tasks = Task.joins(:participants)
.where('tasks.owner_id = ? OR participants.user_id = ?', current_user.id, current_user.id)
.group('tasks.id')
end
Utilizando métodos de ActiveRecord como joins combinados con condiciones específicas, aseguramos que solo se muestren las tareas relevantes.
¿Dónde encontrar más información sobre KanKan?
Para profundizar en más funcionalidades de KanKan, ofrece su documentación en GitHub, donde podrás explorar ejemplos y buenas prácticas en la definición de roles y permisos.
Implementar acceso controlado mejora no solo la seguridad, sino también la experiencia del usuario en tu aplicación. La utilización de gemas como KanKan simplifica este proceso, permitiéndote focalizar en lo realmente importante: el desarrollo de las características propias de tu aplicación.