Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

421
Vistas
Ruby CanCanCan búsqueda inversa de usuarios, ¿una forma más rápida de hacer esto?

He extendido el modelo de usuario para permitirme hacer .can? controles sobre el usuario.

 class User < ApplicationRecord def ability @ability = Ability.new self end delegate :can?, :cannot?, :to => :ability end

Esto me permite hacer cosas como @some_user.can? :edit, Book y obtener un resultado. (El ayudante de vista cancan, pero en el modelo). Esto funciona muy bien.

Sin embargo, me gustaría poder hacer lo contrario y obtener todos los usuarios que pueden realizar una acción.

Ejemplo: Dame todos los usuarios que pueden: editar, Libros. User.can? :edit, Book que devuelve una colección de registros activa.

Para que esto funcione, hice esto;

 class User < ApplicationRecord def self.can? sym, obj, *args uids = [] User.all.each do |user| uids << user.id if user.can? sym, obj, args end User.where id: uids end end

Si bien esto funciona, se siente realmente asqueroso ya que itera a través de cada usuario y me preocupa la escala ... ¿hay una manera más rápida de hacer esto?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

sugiero combinar cancan con rolify gem , con rolify podrías preconfigurar roles para los usuarios, entonces tu problema se convertirá en una consulta para los usuarios que tienen el edit Book role

 member_user.add_role :read, Book admin_user.add_role :edit, Book # query User.with_role(:edit, Book) # [admin_user] User.without_role(:edit, Book) # [member_user]
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda