#################################################################################################### 01. Criando a migration de usuário: [Commit: Criando a migration de usuário](https://github.com/rocketseat-education/explorer-stock-commits/tree/b1aeb5dca6344648b6a926a1ff78d8113beca631) Nesta aula, vamos começar a implementar a camada de autorização no nosso back-end. Vamos começar pela API e depois faremos no front-end também. Dentro da pasta src, temos a pasta database, kinect, migration e nossa migration. Vamos adicionar uma nova coluna chamada "role" na tabela de usuários. Essa coluna será uma enumeração com opções restritas, como "admin" e "customer". Vamos utilizar a propriedade useNative para lidar com essa restrição. Vamos definir um valor padrão para a coluna, como "customer". Em seguida, vamos gerar a estrutura do banco de dados usando o comando npm run migrate. Agora podemos cadastrar usuários com diferentes perfis e verificar se a restrição está funcionando corretamente. #################################################################################################### 02. Adicionando Role nas Requisições: [Commit: Adicionando Role nas Requisições](https://github.com/rocketseat-education/explorer-stock-commits/tree/a5a22193c1048f20d296ef8873f7653170037047) Nesta aula, aprendemos como adicionar informações do usuário nas requisições. Para isso, utilizamos o payload do token para incluir a regra do usuário. No controller de sessão, passamos a regra como parte do payload do token. Em seguida, no middleware de autenticação, recuperamos a informação da regra do usuário. Agora, podemos verificar o perfil do usuário e permitir ou negar o acesso às funções da API com base na regra do usuário. #################################################################################################### 03. Middleware de Autorização: [Commit: Middleware de Autorização](https://github.com/rocketseat-education/explorer-stock-commits/tree/90acbda2db7533ae75d7c4917c9014bba85dd28a) Nesta aula, vamos criar um novo middleware chamado `verifyUserAuthorization` para lidar com a lógica de autorização em nossa API. Vamos receber como parâmetro o perfil do usuário que queremos verificar. Se o perfil do usuário não corresponder ao perfil que estamos verificando, lançaremos uma exceção. Caso contrário, continuaremos com a execução da função. Vamos exportar essa função para que possamos usá-la em nosso projeto. Além disso, vamos criar um novo middleware chamado `authorization.js` para lidar com a autenticação do usuário. Vamos injetar esse middleware nas rotas em que o usuário precisa estar logado. #################################################################################################### 04. Aplicando Autorização em um Conjunto de Rotas: [Commit: Aplicando Autorização em um Conjunto de Rotas](https://github.com/rocketseat-education/explorer-stock-commits/tree/ca2570b2476e14f9c1d86669f1dadd11a9519c95) Nesta aula, aprendemos a aplicar a autorização de usuário que criamos anteriormente. Utilizamos um token de autenticação para fazer login como usuário João e mostramos como esse token é inserido nas requisições. Em seguida, vimos que o usuário João tem acesso total, mas queremos restringir seu acesso aos relatórios financeiros. Para fazer isso, importamos o método Verify User Authorization e o aplicamos a todas as rotas do conjunto Sales.Routes. Definimos que apenas o perfil de administrador tem acesso a essas rotas. Testamos o acesso com o usuário João e vimos que ele recebeu uma mensagem de não autorizado. #################################################################################################### 05. Aplicando Autorização em Rotas Específicas: [Commit: Aplicando Autorização em Rotas Específicas](https://github.com/rocketseat-education/explorer-stock-commits/tree/8df4d6995f536d816d9e3b667dac15ef60bc4fb7) Nesta aula, veremos como aplicar autorização em um conjunto de rotas e agora vou mostrar como fazer para uma rota específica. utilizaremos a rota de produtos como exemplo, onde temos a rota para listar os produtos e a rota para criar novos produtos. Vamos ver como restringir o acesso à rota de criação apenas para o perfil de admin, enquanto o perfil padrão pode consultar os produtos. Veremos como adicionar a restrição de autorização apenas para essa rota específica, sem afetar as outras rotas. #################################################################################################### 06. Múltiplas Roles: [Commit: Múltiplas Roles](https://github.com/rocketseat-education/explorer-stock-commits/tree/1b2d3aa41e307b88e0eb2fbacd5300b89b9e95bb) Nesta aula, vamos aprender uma nova opção para aplicar múltiplos perfis em um mesmo recurso. Vou mostrar como utilizar o `rule to verify` para verificar se um perfil está presente em um array de perfis. Assim, podemos dar acesso a mais de um perfil para um determinado recurso. Vamos fazer um ajuste no nosso `Verify User Authorization` para permitir essa funcionalidade. Em vez de receber apenas um perfil, vamos receber um array de perfis e utilizar o `includes` para verificar se a regra está presente nesse array. Dessa forma, podemos ter diferentes perfis com acesso ao recurso. #################################################################################################### 07. Finalizando o Back-end: Agora que finalizamos o back-end, você pode aplicar essa estratégia em outras rotas e projetos. Vamos agora trabalhar no front-end da nossa aplicação web, combinando a abordagem de autorização com a estrutura de autenticação que você já aprendeu. #################################################################################################### 01. Criando a migration de usuário: [Commit: Criando a migration de usuário](https://github.com/rocketseat-education/explorer-stock-commits/tree/b1aeb5dca6344648b6a926a1ff78d8113beca631) Nesta aula, vamos começar a implementar a camada de autorização no nosso back-end. Vamos começar pela API e depois faremos no front-end também. Dentro da pasta src, temos a pasta database, kinect, migration e nossa migration. Vamos adicionar uma nova coluna chamada "role" na tabela de usuários. Essa coluna será uma enumeração com opções restritas, como "admin" e "customer". Vamos utilizar a propriedade useNative para lidar com essa restrição. Vamos definir um valor padrão para a coluna, como "customer". Em seguida, vamos gerar a estrutura do banco de dados usando o comando npm run migrate. Agora podemos cadastrar usuários com diferentes perfis e verificar se a restrição está funcionando corretamente. #################################################################################################### 02. Adicionando Role nas Requisições: [Commit: Adicionando Role nas Requisições](https://github.com/rocketseat-education/explorer-stock-commits/tree/a5a22193c1048f20d296ef8873f7653170037047) Nesta aula, aprendemos como adicionar informações do usuário nas requisições. Para isso, utilizamos o payload do token para incluir a regra do usuário. No controller de sessão, passamos a regra como parte do payload do token. Em seguida, no middleware de autenticação, recuperamos a informação da regra do usuário. Agora, podemos verificar o perfil do usuário e permitir ou negar o acesso às funções da API com base na regra do usuário. #################################################################################################### 03. Middleware de Autorização: [Commit: Middleware de Autorização](https://github.com/rocketseat-education/explorer-stock-commits/tree/90acbda2db7533ae75d7c4917c9014bba85dd28a) Nesta aula, vamos criar um novo middleware chamado `verifyUserAuthorization` para lidar com a lógica de autorização em nossa API. Vamos receber como parâmetro o perfil do usuário que queremos verificar. Se o perfil do usuário não corresponder ao perfil que estamos verificando, lançaremos uma exceção. Caso contrário, continuaremos com a execução da função. Vamos exportar essa função para que possamos usá-la em nosso projeto. Além disso, vamos criar um novo middleware chamado `authorization.js` para lidar com a autenticação do usuário. Vamos injetar esse middleware nas rotas em que o usuário precisa estar logado. #################################################################################################### 04. Aplicando Autorização em um Conjunto de Rotas: [Commit: Aplicando Autorização em um Conjunto de Rotas](https://github.com/rocketseat-education/explorer-stock-commits/tree/ca2570b2476e14f9c1d86669f1dadd11a9519c95) Nesta aula, aprendemos a aplicar a autorização de usuário que criamos anteriormente. Utilizamos um token de autenticação para fazer login como usuário João e mostramos como esse token é inserido nas requisições. Em seguida, vimos que o usuário João tem acesso total, mas queremos restringir seu acesso aos relatórios financeiros. Para fazer isso, importamos o método Verify User Authorization e o aplicamos a todas as rotas do conjunto Sales.Routes. Definimos que apenas o perfil de administrador tem acesso a essas rotas. Testamos o acesso com o usuário João e vimos que ele recebeu uma mensagem de não autorizado. #################################################################################################### 05. Aplicando Autorização em Rotas Específicas: [Commit: Aplicando Autorização em Rotas Específicas](https://github.com/rocketseat-education/explorer-stock-commits/tree/8df4d6995f536d816d9e3b667dac15ef60bc4fb7) Nesta aula, veremos como aplicar autorização em um conjunto de rotas e agora vou mostrar como fazer para uma rota específica. utilizaremos a rota de produtos como exemplo, onde temos a rota para listar os produtos e a rota para criar novos produtos. Vamos ver como restringir o acesso à rota de criação apenas para o perfil de admin, enquanto o perfil padrão pode consultar os produtos. Veremos como adicionar a restrição de autorização apenas para essa rota específica, sem afetar as outras rotas. #################################################################################################### 06. Múltiplas Roles: [Commit: Múltiplas Roles](https://github.com/rocketseat-education/explorer-stock-commits/tree/1b2d3aa41e307b88e0eb2fbacd5300b89b9e95bb) Nesta aula, vamos aprender uma nova opção para aplicar múltiplos perfis em um mesmo recurso. Vou mostrar como utilizar o `rule to verify` para verificar se um perfil está presente em um array de perfis. Assim, podemos dar acesso a mais de um perfil para um determinado recurso. Vamos fazer um ajuste no nosso `Verify User Authorization` para permitir essa funcionalidade. Em vez de receber apenas um perfil, vamos receber um array de perfis e utilizar o `includes` para verificar se a regra está presente nesse array. Dessa forma, podemos ter diferentes perfis com acesso ao recurso. #################################################################################################### 07. Finalizando o Back-end: Agora que finalizamos o back-end, você pode aplicar essa estratégia em outras rotas e projetos. Vamos agora trabalhar no front-end da nossa aplicação web, combinando a abordagem de autorização com a estrutura de autenticação que você já aprendeu. #################################################################################################### 01. Criando a migration de usuário: [Commit: Criando a migration de usuário](https://github.com/rocketseat-education/explorer-stock-commits/tree/b1aeb5dca6344648b6a926a1ff78d8113beca631) Nesta aula, vamos começar a implementar a camada de autorização no nosso back-end. Vamos começar pela API e depois faremos no front-end também. Dentro da pasta src, temos a pasta database, kinect, migration e nossa migration. Vamos adicionar uma nova coluna chamada "role" na tabela de usuários. Essa coluna será uma enumeração com opções restritas, como "admin" e "customer". Vamos utilizar a propriedade useNative para lidar com essa restrição. Vamos definir um valor padrão para a coluna, como "customer". Em seguida, vamos gerar a estrutura do banco de dados usando o comando npm run migrate. Agora podemos cadastrar usuários com diferentes perfis e verificar se a restrição está funcionando corretamente. #################################################################################################### 02. Adicionando Role nas Requisições: [Commit: Adicionando Role nas Requisições](https://github.com/rocketseat-education/explorer-stock-commits/tree/a5a22193c1048f20d296ef8873f7653170037047) Nesta aula, aprendemos como adicionar informações do usuário nas requisições. Para isso, utilizamos o payload do token para incluir a regra do usuário. No controller de sessão, passamos a regra como parte do payload do token. Em seguida, no middleware de autenticação, recuperamos a informação da regra do usuário. Agora, podemos verificar o perfil do usuário e permitir ou negar o acesso às funções da API com base na regra do usuário. #################################################################################################### 03. Middleware de Autorização: [Commit: Middleware de Autorização](https://github.com/rocketseat-education/explorer-stock-commits/tree/90acbda2db7533ae75d7c4917c9014bba85dd28a) Nesta aula, vamos criar um novo middleware chamado `verifyUserAuthorization` para lidar com a lógica de autorização em nossa API. Vamos receber como parâmetro o perfil do usuário que queremos verificar. Se o perfil do usuário não corresponder ao perfil que estamos verificando, lançaremos uma exceção. Caso contrário, continuaremos com a execução da função. Vamos exportar essa função para que possamos usá-la em nosso projeto. Além disso, vamos criar um novo middleware chamado `authorization.js` para lidar com a autenticação do usuário. Vamos injetar esse middleware nas rotas em que o usuário precisa estar logado. #################################################################################################### 04. Aplicando Autorização em um Conjunto de Rotas: [Commit: Aplicando Autorização em um Conjunto de Rotas](https://github.com/rocketseat-education/explorer-stock-commits/tree/ca2570b2476e14f9c1d86669f1dadd11a9519c95) Nesta aula, aprendemos a aplicar a autorização de usuário que criamos anteriormente. Utilizamos um token de autenticação para fazer login como usuário João e mostramos como esse token é inserido nas requisições. Em seguida, vimos que o usuário João tem acesso total, mas queremos restringir seu acesso aos relatórios financeiros. Para fazer isso, importamos o método Verify User Authorization e o aplicamos a todas as rotas do conjunto Sales.Routes. Definimos que apenas o perfil de administrador tem acesso a essas rotas. Testamos o acesso com o usuário João e vimos que ele recebeu uma mensagem de não autorizado. #################################################################################################### 05. Aplicando Autorização em Rotas Específicas: [Commit: Aplicando Autorização em Rotas Específicas](https://github.com/rocketseat-education/explorer-stock-commits/tree/8df4d6995f536d816d9e3b667dac15ef60bc4fb7) Nesta aula, veremos como aplicar autorização em um conjunto de rotas e agora vou mostrar como fazer para uma rota específica. utilizaremos a rota de produtos como exemplo, onde temos a rota para listar os produtos e a rota para criar novos produtos. Vamos ver como restringir o acesso à rota de criação apenas para o perfil de admin, enquanto o perfil padrão pode consultar os produtos. Veremos como adicionar a restrição de autorização apenas para essa rota específica, sem afetar as outras rotas. #################################################################################################### 06. Múltiplas Roles: [Commit: Múltiplas Roles](https://github.com/rocketseat-education/explorer-stock-commits/tree/1b2d3aa41e307b88e0eb2fbacd5300b89b9e95bb) Nesta aula, vamos aprender uma nova opção para aplicar múltiplos perfis em um mesmo recurso. Vou mostrar como utilizar o `rule to verify` para verificar se um perfil está presente em um array de perfis. Assim, podemos dar acesso a mais de um perfil para um determinado recurso. Vamos fazer um ajuste no nosso `Verify User Authorization` para permitir essa funcionalidade. Em vez de receber apenas um perfil, vamos receber um array de perfis e utilizar o `includes` para verificar se a regra está presente nesse array. Dessa forma, podemos ter diferentes perfis com acesso ao recurso. #################################################################################################### 07. Finalizando o Back-end: Agora que finalizamos o back-end, você pode aplicar essa estratégia em outras rotas e projetos. Vamos agora trabalhar no front-end da nossa aplicação web, combinando a abordagem de autorização com a estrutura de autenticação que você já aprendeu.