Djordje Djoric 3 лет назад
Родитель
Сommit
0c78033191
4 измененных файлов: 36 добавлений и 2 удалений
  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 Просмотреть файл

module.exports = {
Admin : 'Admin',
User: 'User'
}

+ 4
- 0
src/database/models/user.js Просмотреть файл

type: String, type: String,
required: true required: true
}, },
role: {
type: String
},
tokens: [{ tokens: [{
token: { token: {
type: String, type: String,
name: Joi.string().min(2).required(), name: Joi.string().min(2).required(),
password: Joi.string().min(8).regex(/[a-zA-Z0-9]{3,30}/).required(), password: Joi.string().min(8).regex(/[a-zA-Z0-9]{3,30}/).required(),
email: Joi.string().email().required(), email: Joi.string().email().required(),
role: Joi.string()
}) })


const validation = schema.validate(obj); const validation = schema.validate(obj);

+ 26
- 1
src/middleware/auth.js Просмотреть файл

const jwt = require('jsonwebtoken') const jwt = require('jsonwebtoken')
const User = require('../database/models/user')
const Role = require('../database/models/roles')


const auth = async (req, res, next) => { const auth = async (req, res, next) => {
try { try {
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 Просмотреть файл

const express = require('express') const express = require('express')
const endpoints = require('../endpoints/user') const endpoints = require('../endpoints/user')
const router = new express.Router() const router = new express.Router()
const auth = require('../middleware/auth')


/** /**
* @openapi * @openapi
* 500: * 500:
* description: Internal server error. * description: Internal server error.
*/ */
router.get('/users', endpoints.getUsers)
router.get('/users', auth.authRole, endpoints.getUsers)


/** /**
* @openapi * @openapi

Загрузка…
Отмена
Сохранить