From 08802c68202a9f9cddc7061cfc159aeec66689c8 Mon Sep 17 00:00:00 2001 From: Sathishkumar Krishnan Date: Mon, 10 Jan 2022 05:07:44 +0530 Subject: [PATCH] feat: added seeder for UI modules auth permissions --- src/config/constants.js | 21 ++++++++++++++++++++- src/config/db/connect.js | 23 +++++++++++++++++++++++ src/config/db/seed-auth-data.js | 13 +++++++++++++ src/index.js | 16 ++++------------ src/models/UserPermission.js | 12 +++++++----- 5 files changed, 67 insertions(+), 18 deletions(-) create mode 100644 src/config/db/connect.js create mode 100644 src/config/db/seed-auth-data.js diff --git a/src/config/constants.js b/src/config/constants.js index a7151a4..6950070 100644 --- a/src/config/constants.js +++ b/src/config/constants.js @@ -65,11 +65,29 @@ const ItemTransactionTypes = [ "RESERVE", "CHECK-IN", "CHECK-OUT", - "RESERVE" + "REPORT", + "ADJUST", ]; const ReportItemForTypes = ["LOCATION", "ISSUE", "INCIDENT"]; +const AllUIModules = [ + "Home::Explore Inventory", + "Home::Scan", + "Home::Receiving", + "Home::Shipping", + "Setup::Warehouse design", + "Setup::Inventory Definition", + "Setup::User & Access", + "Setup::Labelling", + "Report::Warehouse design", + "Report::Inventory Definition", + "Report::User & Access", + "Report::Labelling", + "Messages", + "Settings", +]; + module.exports = { UserActions, InventoryScopes, @@ -88,4 +106,5 @@ module.exports = { AUTHORIZATION_FAILURE_ERROR_MESSAGE, ItemTransactionTypes, ReportItemForTypes, + AllUIModules, }; diff --git a/src/config/db/connect.js b/src/config/db/connect.js new file mode 100644 index 0000000..121d027 --- /dev/null +++ b/src/config/db/connect.js @@ -0,0 +1,23 @@ +const mongoose = require("mongoose"); + +const { MONGODB_URI } = require("../env"); + + +const connect = async () => { + console.log("Connecting to MongoDB ..."); + await mongoose + .connect(MONGODB_URI, { + useNewUrlParser: true, + useUnifiedTopology: true, + }) + .then(() => { + console.log("Connected to MongoDB at: ", MONGODB_URI); + }) + .catch(console.error); + + mongoose.set("debug", true); +}; + +module.exports = { + connect, +}; diff --git a/src/config/db/seed-auth-data.js b/src/config/db/seed-auth-data.js new file mode 100644 index 0000000..f4c0f21 --- /dev/null +++ b/src/config/db/seed-auth-data.js @@ -0,0 +1,13 @@ +const db = require("./connect"); +const UserPermission = require("../../models/UserPermission"); +const { AllUIModules } = require("../constants"); +(async () => { + await db.connect(); + for (const UIModule of AllUIModules) { + const modulePermission = await UserPermission.findOne({ name: UIModule, allowedUIModules: [UIModule] }); + if (!modulePermission) { + await UserPermission.create({ name: UIModule, allowedUIModules: [UIModule] }); + } + } + process.exit(1); +})(); diff --git a/src/index.js b/src/index.js index e3d6e9e..726f7a0 100644 --- a/src/index.js +++ b/src/index.js @@ -4,26 +4,18 @@ const helmet = require("helmet"); const cors = require("cors"); const morgan = require("morgan"); -const mongoose = require("mongoose"); + const { router } = require("./controller"); const { API_PORT, - MONGODB_URI, } = require("./config/env"); +const db = require("./config/db/connect"); + (async () => { console.log("Connecting to MongoDB ..."); - await mongoose - .connect(MONGODB_URI, { - useNewUrlParser: true, - useUnifiedTopology: true, - }) - .then(() => { - console.log("Connected to MongoDB at: ", MONGODB_URI); - }) - .catch(console.error); - mongoose.set("debug", true); + await db.connect(); const app = express(); diff --git a/src/models/UserPermission.js b/src/models/UserPermission.js index be2cf93..6059f8b 100644 --- a/src/models/UserPermission.js +++ b/src/models/UserPermission.js @@ -1,9 +1,5 @@ const mongoose = require("mongoose"); -const { - UserActions, - WarehouseScopes, - InventoryScopes, -} = require("./../config/constants"); +const { UserActions, WarehouseScopes, InventoryScopes, AllUIModules } = require("./../config/constants"); const schema = new mongoose.Schema( { @@ -37,6 +33,12 @@ const schema = new mongoose.Schema( }, }, ], + allowedUIModules: [ + { + type: String, + enum: AllUIModules, + }, + ], actions: [ { type: String,