mdds-mongoose-express-auth-server
Version:
Model Driver Development Stack - authentication and authorization server for mongoose and express based application. It can be enabled to work as authentication, user profile managment, and authorization management servers.
82 lines (67 loc) • 2.6 kB
JavaScript
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
//User Roles
const roleSchema = new Schema({
group: { type: String, required: true, index: { unique: true }, maxlength: 50 },
description: { type: String, maxlength: 200}
});
const roleBrief = "group description";
const roleDetail = "group description";
const roleCreat = "group description";
const roleEdit = "group description";
const roleTextSearch = "group description";
const roleIndex = "group";
//System Modules
const moduleSchema = new Schema({
module: { type: String, required: true, index: { unique: true }},
resources: {type: [String]},
});
const moduleBrief = "module resources";
const moduleDetail = "module resources";
const moduleCreat = "module resources";
const moduleEdit = "module resources";
const moduleTextSearch = "module resources";
const moduleIndex = "module";
//Permission
const permissionSchema = new Schema({
group: { type: Schema.Types.ObjectId, ref: 'musergroup', required: true },
module: { type: Schema.Types.ObjectId, ref: 'mpubmodule', required: true },
modulePermission: { type: String }, //"CRUD"
resourcePermission: {type: Map, of: String}, //{resource: "CRUD"}
});
//to make the association unique
permissionSchema.index({ group: 1, module: 1}, {unique: true}); // schema level
const permBrief = "group module modulePermission";
const permDetail = "group module modulePermission resourcePermission";
const permCreat = "group module modulePermission resourcePermission";
const permEdit = "group module modulePermission resourcePermission";
const permTextSearch = "group module";
const permIndex = "group"; //let's temporarily put any field here since this schema is not referred.
//Put all schemas together
const schemas = {
"musergroup": {
schema: roleSchema,
views: [roleBrief, roleDetail, roleCreat, roleEdit, roleTextSearch, roleIndex],
name: 'User Group'
},
"mpubmodule": {
schema: moduleSchema,
views: [moduleBrief, moduleDetail, moduleCreat, moduleEdit, moduleTextSearch, moduleIndex],
name: 'Public Module'
},
"mpubaccess": {
schema: permissionSchema,
views: [permBrief, permDetail, permCreat, permEdit, permTextSearch, permIndex],
name: 'Access Control'
}
};
const dateFormat = "MM-DD-YYYY";
const timeFormat = "hh:mm:ss";
const config = {
dateFormat: dateFormat,
timeFormat: timeFormat,
}
const authz = { //only users with permission can see this module
"module-authz": {"LoginUser": {"others": "", "own": ""}, "Anyone": ""},
}
module.exports = {schemas: schemas, config: config, authz: authz};