Explorar el Código

User roles

pull/47/head^2
Djordje Djoric hace 3 años
padre
commit
0c78033191
Se han modificado 4 ficheros con 36 adiciones y 2 borrados
  1. 4
    0
      src/database/models/roles.js
  2. 4
    0
      src/database/models/user.js
  3. 26
    1
      src/middleware/auth.js
  4. 2
    1
      src/routes/user.js

+ 4
- 0
src/database/models/roles.js Ver fichero

@@ -0,0 +1,4 @@
module.exports = {
Admin : 'Admin',
User: 'User'
}

+ 4
- 0
src/database/models/user.js Ver fichero

@@ -13,6 +13,9 @@ const userSchema = new mongoose.Schema({
type: String,
required: true
},
role: {
type: String
},
tokens: [{
token: {
type: String,
@@ -26,6 +29,7 @@ userSchema.statics.joiValidate = async function(obj) {
name: Joi.string().min(2).required(),
password: Joi.string().min(8).regex(/[a-zA-Z0-9]{3,30}/).required(),
email: Joi.string().email().required(),
role: Joi.string()
})

const validation = schema.validate(obj);

+ 26
- 1
src/middleware/auth.js Ver fichero

@@ -1,4 +1,6 @@
const jwt = require('jsonwebtoken')
const User = require('../database/models/user')
const Role = require('../database/models/roles')

const auth = async (req, res, next) => {
try {
@@ -12,4 +14,27 @@ const auth = async (req, res, next) => {
next()
}

module.exports = auth
const authRole = async (req, res, next) => {
try {
const token = req.header('Authorization').replace('Bearer ', '')
if(!token) {
return res.status(404).send('Invalid token!')
}

const findUser = await User.findOne({ 'tokens.token': token })
if(!findUser) {
return res.status(404).send('No user has the token provided!')
}
if(findUser['role'] === Role.Admin) {
console.log('User is admin!')
next()
}
else {
return res.status(401).send('Not authorized!')
}
} catch(e) {
next(e)
}
}

module.exports = { auth, authRole }

+ 2
- 1
src/routes/user.js Ver fichero

@@ -1,6 +1,7 @@
const express = require('express')
const endpoints = require('../endpoints/user')
const router = new express.Router()
const auth = require('../middleware/auth')

/**
* @openapi
@@ -16,7 +17,7 @@ const router = new express.Router()
* 500:
* description: Internal server error.
*/
router.get('/users', endpoints.getUsers)
router.get('/users', auth.authRole, endpoints.getUsers)

/**
* @openapi

Cargando…
Cancelar
Guardar