Skip to content

Commit 8e36e47

Browse files
committed
Enabled editing facilities, users get a role
Only admins can add and edit facilities, fixed facility phone/telephone bug, added Traversy credits
1 parent b36e10a commit 8e36e47

File tree

5 files changed

+66
-18
lines changed

5 files changed

+66
-18
lines changed

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,19 @@ GET /facilities // Returns facilities array
3333
```
3434

3535
```bash
36-
POST /facilities // Creates a facility
36+
GET /facilities/:id // Returns a facility by ID
37+
```
38+
39+
```bash
40+
POST /facilities // Creates a facility (requires authorization)
41+
```
42+
43+
```bash
44+
PUT /facilities/:id // Edits a facility by ID (requires authorization)
3745
```
3846

3947
## JSON Format (Schema)
4048
### User
41-
{firstName, lastName, mail, password}
49+
{firstName, lastName, mail, password, role(defaults to 'user')}
4250
### Facility
4351
{name, address, mail, telephone}

app.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ const passport = require('passport');
55
const mongoose = require('mongoose');
66
const config = require('./config/database');
77

8+
/* skeleton project taken from Brad Traversy https://github.com/bradtraversy/nodeauthapp */
9+
810
// Connect To Database
911
mongoose.Promise = global.Promise;
1012
mongoose.connect(config.database, { useMongoClient: true });

models/user.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ const UserSchema = mongoose.Schema({
2020
password: {
2121
type: String,
2222
required: true
23+
},
24+
role: {
25+
type: String,
26+
default: "user"
2327
}
2428
});
2529

@@ -30,7 +34,7 @@ module.exports.getUserById = function(id, callback){
3034
};
3135

3236
module.exports.getUserByMail = function(mail, callback){
33-
const query = {mail: mail}
37+
const query = {mail: mail};
3438
User.findOne(query, callback);
3539
};
3640

routes/facilities.js

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,56 @@ const config = require('../config/database');
55
const Facility = require('../models/facility');
66

77
// Add New Facility
8-
router.post('/', (req, res, next) => {
9-
let newFacility = new Facility({
10-
name: req.body.name,
11-
address: req.body.address,
12-
mail: req.body.mail,
13-
telephone: req.body.phone
14-
});
8+
router.post('/', passport.authenticate('jwt', {session: false}), (req, res, next) => {
9+
let role = req.user.role;
10+
console.log(role);console.log(req.user.role);
11+
//protect route, limit to admins only
12+
if (role !== "admin") res.status(403).json({success: false, msg: 'Unauthorized'});
13+
let newFacility = new Facility({
14+
name: req.body.name,
15+
address: req.body.address,
16+
mail: req.body.mail,
17+
telephone: req.body.telephone
18+
});
1519

16-
Facility.addFacility(newFacility, (err, facility) => {
17-
if (err) {
18-
res.json({ success: false, msg: 'Failed to create facility' });
19-
} else {
20-
res.json({ success: true, msg: 'Facility created' });
21-
}
22-
});
20+
Facility.addFacility(newFacility, (err, facility) => {
21+
if (err) {
22+
res.json({success: false, msg: 'Failed to create facility'});
23+
} else {
24+
res.json({success: true, msg: 'Facility created'});
25+
}
26+
});
2327
});
2428

2529
// Read all facilities
2630
router.get('/', (req, res, next) => {
2731
Facility.find().then(facilities => {
2832
res.send(facilities);
33+
}).catch(err => {
34+
res.status(404).send(err);
35+
})
36+
});
37+
38+
// Read a single facility by ID
39+
router.get('/:id', (req, res, next) => {
40+
Facility.findById(req.params.id).then(facility => {
41+
res.send(facility);
42+
}).catch(err => {
43+
res.status(404).send(err);
44+
})
45+
});
46+
47+
// Edit a single facility by ID
48+
router.put('/:id', passport.authenticate('jwt', {session: false}), (req, res, next) => {
49+
let role = req.user.role;
50+
//protect route, limit to admins only
51+
if (role !== "admin") res.status(403).json({success: false, msg: 'Unauthorized'});
52+
53+
Facility.findOneAndUpdate({_id: req.params.id}, req.body, {new: true})
54+
.then(facility => {
55+
res.send(facility);
56+
}).catch(err => {
57+
res.status(404).send(err);
2958
})
3059
});
3160

routes/users.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,12 @@ router.post('/login', (req, res, next) => {
4444
res.json({
4545
success: true,
4646
token: 'JWT ' + token,
47-
user: user
47+
user: {
48+
firstName: user.firstName,
49+
lastName: user.lastName,
50+
mail: user.mail,
51+
role: user.role
52+
}
4853
});
4954
} else {
5055
return res.json({ success: false, msg: 'Wrong password' });

0 commit comments

Comments
 (0)