Skip to content

Commit 37b6152

Browse files
add an api to remove privilaged roles to all users (#1355)
* add an api to remove privilaged roles to all users * add middleware to allow body
1 parent ce0dbe1 commit 37b6152

File tree

3 files changed

+73
-3
lines changed

3 files changed

+73
-3
lines changed

controllers/staging.js

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { addOrUpdate } = require("../models/users");
1+
const { addOrUpdate, getUsersByRole } = require("../models/users");
22

33
const updateRoles = async (req, res) => {
44
try {
@@ -29,6 +29,58 @@ const updateRoles = async (req, res) => {
2929
}
3030
};
3131

32+
const removePrivileges = async (req, res) => {
33+
if (process.env.NODE_ENV === "production") {
34+
return res.status(403).json({
35+
message: "FORBIDDEN | To be used only in staging and development",
36+
});
37+
}
38+
try {
39+
const updateUserPromises = [];
40+
const members = await getUsersByRole("member");
41+
const superUsers = await getUsersByRole("super_user");
42+
43+
members.forEach((member) => {
44+
updateUserPromises.push(
45+
addOrUpdate(
46+
{
47+
roles: {
48+
...member.roles,
49+
member: false,
50+
},
51+
},
52+
member.id
53+
)
54+
);
55+
});
56+
superUsers.forEach((superUser) => {
57+
updateUserPromises.push(
58+
addOrUpdate(
59+
{
60+
roles: {
61+
...superUser.roles,
62+
super_user: false,
63+
},
64+
},
65+
superUser.id
66+
)
67+
);
68+
});
69+
70+
await Promise.all(updateUserPromises);
71+
72+
return res.status(200).json({
73+
message: "Roles Updated successfully",
74+
});
75+
} catch (err) {
76+
logger.error(`Oops an error occurred: ${err}`);
77+
return res.status(500).json({
78+
message: "Oops an internal error occurred",
79+
});
80+
}
81+
};
82+
3283
module.exports = {
3384
updateRoles,
85+
removePrivileges,
3486
};

middlewares/validators/staging.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,23 @@ const validateUserRoles = async (req, res, next) => {
1717
}
1818
};
1919

20+
const validateRevokePrivileges = async (req, res, next) => {
21+
const schema = joi
22+
.object()
23+
.strict()
24+
.keys({
25+
action: joi.string().equal("revoke"),
26+
});
27+
try {
28+
await schema.validateAsync(req.body);
29+
next();
30+
} catch (err) {
31+
logger.error(`Error validating validateUserRoles payload : ${err}`);
32+
res.boom.badRequest(JSON.stringify({ allowedParameters: { action: "revoke" } }));
33+
}
34+
};
35+
2036
module.exports = {
2137
validateUserRoles,
38+
validateRevokePrivileges,
2239
};

routes/staging.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
const express = require("express");
22
const authenticate = require("../middlewares/authenticate");
3-
const { validateUserRoles } = require("../middlewares/validators/staging");
4-
const { updateRoles } = require("../controllers/staging");
3+
const { validateUserRoles, validateRevokePrivileges } = require("../middlewares/validators/staging");
4+
const { updateRoles, removePrivileges } = require("../controllers/staging");
55
const router = express.Router();
66

77
router.patch("/user", validateUserRoles, authenticate, updateRoles);
8+
router.post("/users/privileges", validateRevokePrivileges, removePrivileges);
89

910
module.exports = router;

0 commit comments

Comments
 (0)