Autorização no Ransack, Permitindo ou Negando operações de pesquisa e ordenação
Tags: ruby, programming, braziliandevs
Published: 2024-01-28 15:44:08

---
title: Autorização no Ransack, Permitindo ou Negando operações de pesquisa e ordenação
published: true
description: Autorização no Ransack
series: Query Language
tags: ruby, programming, braziliandevs
cover_image: https://i.imgur.com/vFk58dM.jpeg
---

Por padrão, o Ransack autoriza a pesquisa e a ordenação em todos os campos do modelo e não autoriza quaisquer escopos de classe. No entanto, podemos personalizar essa autorização usando quatro métodos específicos que podem ser redefinidos em nossos modelos: **ransackable_attributes**, **ransackable_associations**, **ransortable_attributes** e **ransackable_scopes**. Vamos explorar como podemos utilizar esses métodos para controlar precisamente quais operações de pesquisa e ordenação são permitidas em nossa aplicação.

## Permitindo ou Negando Operações de Pesquisa

O método **ransackable_attributes** determina quais atributos de um modelo podem ser usados para pesquisa. Por padrão, ele retorna todos os nomes de colunas do banco de dados e quaisquer ransackers definidos. Esse método pode ser redefinido para permitir apenas pesquisas em determinados campos.

```ruby
def ransackable_attributes(auth_object = nil)
  %w[name email] # Apenas 'nome' e 'email' são permitidos para pesquisa
end
```

No exemplo, apenas os campos **nome** e **email** podem ser usados para pesquisa.

## Controlando as Associações Permitidas

O método **ransackable_associations** determina quais associações de um modelo podem ser usadas para pesquisa. Por padrão, ele retornas os nomes de todas as associações definidas no modelo. Podemos redefinir as associações através desse método.

```ruby
def ransackable_associations(auth_object = nil)
  %w[posts] # Apenas 'posts' pode ser usado para pesquisa
end
```

No exemplo, apenas as associações **posts** podem ser usadas para pesquisa.

## Permitindo ou Negando a Ordenação

O método **ransortable_attributes** determina quais atributos de um modelo podem ser usados para ordenação. Por padrão, ele retorna os mesmos atributos definidos em **ransackable_attributes**. Podemos redefinir esse método para permitir ou negar a ordenação em determinados atributos.

```ruby
def ransortable_attributes(auth_object = nil)
  %w[name email] # Apenas 'nome' e 'email' podem ser usados para ordenação
end
```

No exemplo, apenas os campos **nome** e **email** podem ser usados para ordenação.

## Controlando os Escopos Autorizados

O método **ransackable_spoces** determina quais escopos de classe **(método de classe)** de um modelo podem ser usados para pesquisa. Por padrão, ele retorna uma lista vazia, o que significa que nenhum escopo de classe está autorizado. Podemos redefinir esse método para permitir ou negar a pesquisa em determinados escopos de classe.

```ruby
def ransackable_scopes(auth_object = nil)
  [:active] # Apenas o escopo 'ativo' pode ser usado para pesquisa
end
```

Isso significa que apenas o escopo de classe **active** do modelo pode ser usado em operações de pesquisa.

## Conclusão

Ao personalizar esses métodos em nossos modelos Rails, podemos controlar precisamente quais operações de pesquisa e ordenação são permitidas em nossos modelos. Isso nos dá maior flexibilidade e segurança ao lidar com consultas em nossas aplicações, garantindo que apenas as operações autorizadas sejam executadas em campos e associações específicas.

## Sabia Mais

- Ransack Documentation: [Authorization (allowlisting/denylisting)](https://activerecord-hackery.github.io/ransack/going-further/other-notes/#authorization-allowlistingdenylisting)