RbacRls

Esta biblioteca tem por finalidade prover a funcionalidade de controle de acesso granular aos dados, contribuindo para a segurança através de verificações de acesso a informação. Este modelo tem como base os conceitos do recurso de controle de acesso RBAC(Role-Based Access Control ) aplicados juntamente aos métodos de RLS(Row-Level Security).

O framework proposto tem por objetivo facilitar a implantação da funcionalidade de segurança, auxiliando o programador na implementação das políticas de restrições no banco de dados.

RLS:

A segurança em nível de linha permite que você use um contexto de execução para controlar o acesso a 
linhas em uma tabela de banco de dados, simplificando o design e a codificação de 
segurança da sua aplicação.

RBAC:

O controle de acesso baseado em função (RBAC) é um modelo de restrição de que tem como base as funções de usuários
individuais em um contexto hierárquico. O RBAC garante que os usuários acessem apenas as informações de que precisam
para realizar suas rotina  e os impede de acessar informações que não pertencem a eles.

Como utilizar esta Gem ?.

Caso queira Apenas Testar há essa aplicação principal com um Scaffold básico "produtos" de exemplo:  https://gitlab.com/FilipeBeserraMaia/example_to_test

Instalação:

Adicione esta linha no arquivo da sua aplicação Gemfile

gem "rbac_rls"

E então execute o seguinte comando:

$ bundle

Ou Instale você mesmo manualmente com o comando abaixo :

$ gem install rbac_rls

Adicione no seu arquivo manifest.js:

//= link rbac_rls/application.css
//= link rbac_rls/application.js
Adicione no seu arquivo application_record.rb:
#Em application_record.rb
include ConnectionRlsConcern
Adicione no seu arquivo application_controller.rb:
#Em application_controller.rb" 
include ConnectionRlsUserConcern
    Para fazer o uso desta biblioteca é necessário que a aplicação principal, acesse o banco de dados apartir de um 
    usuário que não é o dono do banco de dados pois, as regras de Segurança em nivél de linha não podem ser aplicadas a
    este tipo de usuário do banco de dados.
Então: apenas para casos onde seja necessario rodar migrates como administrador utilize um novo Environment ou um método 
diferente de conexão com o banco que não seja como da aplicação principal
 Por exemplo: 
 a aplicação por padrão utilizará um usuário "app_user" para suas consultas.
 para rodar as migrates da aplicação o usuário padrão será "data_base_admin"
 logo no environment "development" o usuário do banco de dados será :app_user
 e no  environment "migrations" o usuário do banco de dados será :data_base_admin

 Passos para criar um environment :
 1º  duplique um arquivo de  app/config/environments
 2º  configure o deu database.yml como no exemplo abaixo: 
     exemplo:
         -----------
         migrations:
          <<: *default
          database: main_app_development
          username: username
          password: password
         -----------
  3º para rodar as migrates usando este environment use um comando análogo a "rake db:migrate RAILS_ENV=migrations"

Logo após estes passos, na linha de comando execute:

rake rbac_rls:install:migrations  
Adicione na sua aplicação em config/routes.rb
# Em config/routes.rb adicione 
mount RbacRls::Engine => :rbac_rls

Execute na linha de comando:

rake db:migrate

yarn  install    

após isso a bibilioteca está instalada, e pode ser acessada em /rbac_rls

License

The gem is available as open source under the terms of the MIT License.