1.4.1 • Published 3 years ago

@desco/sequelize-permission-resources v1.4.1

Weekly downloads
50
License
ISC
Repository
github
Last release
3 years ago

Veja outros projetos NPM aqui.

Veja outros projetos aqui.


📋 Tabela de conteúdos


✔️ Recursos

  • Login;
  • Login com Google;
  • Controle de permissões;

🛠️ Tecnologias

As seguintes tecnologias são utilizadas:


⚙️ Instalação

npm install --save @desco/sequelize-permission-resources

Note que será necessário ter o NPM instalado para o comando funcionar.


📦 Importação

const sequelizePermissionResources = require("@desco/sequelize-permission-resources");

📚 Como Usar

Conceito

Teremos três modelos para armazenar usuários, grupos de usuários e permissões, além de mais um modelo para o relacionamento entre usuários e grupos de usuários.

Os modelos com seus atributos deverão ser criados pelo programador utilizando os nomes que preferir e, uma vez criados, serão informados para o sequelizePermissionResources para que possa trabalhar com eles, inclusive criando os relacionamentos.

Uma vez os modelos criados e todos os parâmetros passados ao sequelizePermissionResources, tudo será automatizado e serão criadas rotas para login e (no caso do google) callback.

Utilizar o Google por padrão é desabilitado e deve ser habilitado caso deseje utilizar.

Uma vez efetuado o login, um token será retornado para o frontend, o qual deverá ser informado em todas as requisições.

O sequelizePermissionResources irá validar o token e, caso valido, irá liberar ou negar o acesso dependendo das permissões dadas ao usuário ou grupo de usuário associado ao token.

Para liberar acesso a um recurso ou URL para todos os usuários, sem necessidade de token, crie um registro no modelo de permissões no qual o acesso será liberado (true) e o usuário e grupo de usuário serão null.

Falando em liberação ou restrição, três valores são possíveis:

  • true para liberar;
  • false para negar;
  • null para negar a menos que outra permissão esteja liberando;

Como pode ver, é possível ter várias permissões para um recurso ou URL, por exemplo, um usuário pode estar como null a uma url e true em vários grupos, exceto em um que define como false... e agora?

o sequelizePermissionResources possui uma hierarquia de importância nas permissões e ela é a seguinte, do menos ao mais importante:

  • Permissão Geral (onde usuário e grupo de usuário são null);
  • Permissão de Grupos;
  • Permissão de Usuários;

Dessa forma, se um acesso for negado nas permissões gerais, porém liberado em um dos grupos do usuário, o acesso será liberado pois as permissões de grupos são mais importantes.

Da mesma forma, se o acesso for negado nos grupos, porém liberado diretamente para o usuário, o acesso será liberado pois as permissões de usuário são mais importantes.

Agora, se houver um conflito entre as permissões dos vários grupos, a importância será para a permissão false, ou seja, se houver um único grupo com permissão false e todos os outros true, a permissão será false.

Note também que null terá comportamento de false, mas diferente do false, poderá ser sobrescrito pelo true.

Modelos

Comece criando 3 modelos Sequelize com seus atributos, são eles:

Os nomes dos modelos e atributos não importam pois podem ser personalizados, porém os nomes dos atributos aqui informados servem como padrão.

User

Modelo para armazenamento dos usuários, com os seguintes atributos:

  • id - Id do registro;
  • login - Nome de login do usuário (String);
  • mail - Email do usuário (String);
  • password - Senha do usuário (String);
  • token - Token do usuário de quando estiver autenticado (Pelo menos 500 caracteres);
  • tokenType - Tipo do token (Valor ENUM que aceita default ou null);
  • expireToken - Data de expiração do token (BIGINT);

UserGroup

Modelo para armazenamento dos grupos de usuários, com os seguintes atributos:

  • id - Id do registro;
  • name - Nome do grupo (String);

User_UserGroup

Modelo que irá relacionar os usuários com os grupos de usuários, com o seguintes atributos:

O nome deste modelo deve seguir as regras do Sequelize para modelos que relacionam dois outros modelos.

  • id - Id do registro;

Permission

Modelo para armazenamento das permissões de acesso, com os seguintes atributos:

  • id - Id do registro;
  • resource - Nome ou URL do recurso (String);
  • allow - Se o acesso esta liberado (true), negado (false) ou padrão (null);

Executando

Chame o método passando os devidos parâmetros e a mágica será feita!

sequelizePermissionResources({ ...params });

Veja todos os parâmetros a seguir.

Parâmetros

NomeTipoObrigatórioPadrãoDescrição
ExpressAppSim-Aplicação do Express já declarada
OpOpSim-Objeto de operadores do Sequelize
UserObjetoSim-Modelo do Sequelize para os Usuários
GroupObjetoSim-Modelo do Sequelize para os Grupos de Usuários
PermissionObjetoSim-Modelo do Sequelize para as Permissões de Acesso
userPkPropStringNão'id'Nome do atributo de id do modelo de usuário
loginPropStringNão'mail'Nome do atributo de login do modelo de usuário
pswPropStringNão'password'Nome do atributo de senha do modelo de usuário
tokenPropStringNão'token'Nome do atributo de token do modelo de usuário
tokenTypePropStringNão'tokenType'Nome do atributo de tipo de token do modelo de usuário
expireTokenPropStringNão'expireToken'Nome do atributo de data de expiração do token do modelo de usuário
groupPkPropStringNão'id'Nome do atributo de id do modelo de grupo de usuário
resourcePropStringNão'resource'Nome do atributo de recurso a ser acessado do modelo de permissão
allowPropStringNão'allow'Nome do atributo de liberação do recurso do modelo de permissão
secretStringSim-String segredo a ser usada para criar os tokens
algorithmStringNãoHS256Técnica de hash a ser usado nos tokens
urlLoginStringNão/loginURL da rota de login
loginCallbackFunctionNão(p) => pFunção ao ser executada ao ter sucesso no login
expireTokenFunctionNão() => moment().add(1, 'hours').unix()Função que irá gerar a hora unix de expiração do token
invalidTokenJSONNão{ message: 'Invalid Token', }JSON a ser retornado caso o token informado seja inválido
noTokenJSONNão{ message: 'No Token', }JSON a ser retornado caso não tenha passado um token
expiredTokenJSONNão{ message: 'Expired Token', }JSON a ser retornado caso o token tenha expirado
invalidPermissionJSONNão{ message: 'Invalid Permissions', }JSON a ser retornado caso não tenha permissão para acessar o recurso
googlebooleanNãofalseSe irá usar autenticação via aplicação Google
googleURLStringNão/oauth/googleURL da rota de login do google
googleCallbackbURLStringNão/oauth/google/callbackURL da rota de callback do login do google
googleIdStringNão-ID da aplicação Google
googleKeyStringNão-Chave da aplicação Google
googleScopeStringNão-Escopos a serem acessados na aplicação Google

Autor

1.4.1

3 years ago

1.4.0

3 years ago

1.3.1

3 years ago

1.3.0

3 years ago

1.2.5

3 years ago

1.2.4

3 years ago

1.2.0

3 years ago

1.2.3

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago