Browse Source

Merge branch 'RoleExperiment' into feature/27

pull/47/head
Djordje Djoric 3 years ago
parent
commit
2635b42630
5 changed files with 37 additions and 3 deletions
  1. 4
    0
      src/database/models/roles.js
  2. 4
    0
      src/database/models/user.js
  3. 1
    1
      src/endpoints/user.js
  4. 26
    1
      src/middleware/auth.js
  5. 2
    1
      src/routes/user.js

+ 4
- 0
src/database/models/roles.js View File

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

+ 4
- 0
src/database/models/user.js View File

@@ -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);

+ 1
- 1
src/endpoints/user.js View File

@@ -8,7 +8,7 @@ const getUsers = async (req, res, next) => {
return res.status(200).send(allUsers)
} catch (e) {
// TODO: Jel i ovde treba next(e)?
return res.status(500).send('Internal server error!')
next(e)
}
}


+ 26
- 1
src/middleware/auth.js View File

@@ -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(401).send('No user has the token provided!')
}
if(findUser['role'] === Role.Admin) {
console.log('User is admin!')
next()
}
else {
return res.status(403).send('Access forbidden!')
}
} catch(e) {
next(e)
}
}

module.exports = { auth, authRole }

+ 2
- 1
src/routes/user.js View File

@@ -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

Loading…
Cancel
Save