Initial commit
This commit is contained in:
153
models/role.js
Normal file
153
models/role.js
Normal file
@@ -0,0 +1,153 @@
|
||||
const Mongoose = require('mongoose');
|
||||
|
||||
const RoleSchema = new Mongoose.Schema({
|
||||
name: { type: String, required: true, unique: true },
|
||||
description: { type: String },
|
||||
add: { type: Boolean, default: false },
|
||||
delete: { type: Boolean, default: false },
|
||||
edit: { type: Boolean, default: false },
|
||||
manage: { type: Boolean, default: false },
|
||||
super: { type: Boolean, default: false },
|
||||
view: { type: Boolean, default: true },
|
||||
disabled: { type: Boolean, default: false },
|
||||
order: { type: Number, default: 1 },
|
||||
updated_at: { type: Date, default: Date.now }
|
||||
});
|
||||
|
||||
RoleSchema.pre('findOneAndUpdate', function (next) {
|
||||
this.update({}, { $set: { updated_at: Date.now() } });
|
||||
next();
|
||||
});
|
||||
|
||||
const RoleModel = Mongoose.model('roles', RoleSchema);
|
||||
|
||||
module.exports = {
|
||||
canRole: (e, roleId, action, callback) => {
|
||||
[initial, canElevate = false] = Array.isArray(action) ? action : [action];
|
||||
|
||||
RoleModel.findById(roleId, (err, result) => {
|
||||
if (err) {
|
||||
callback('There was an error querying roles', null);
|
||||
}
|
||||
|
||||
if (result) {
|
||||
let permissions = result[initial] && canElevate ? {
|
||||
hasPermission: result[initial],
|
||||
canElevate: canElevate ? result[canElevate] : null
|
||||
} : result[initial];
|
||||
callback(null, permissions);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
createRole: (e, role) => {
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
var roleInstance = new RoleModel(role);
|
||||
|
||||
roleInstance.save((err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
|
||||
if (result) {
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
promise.then((result) => {
|
||||
e.emit('createRole', null, result);
|
||||
})
|
||||
.catch((err) => {
|
||||
e.emit('createRole', err, null);
|
||||
});
|
||||
},
|
||||
|
||||
getRoles: (e, query) => {
|
||||
query = query || {};
|
||||
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
RoleModel
|
||||
.find(query.find, query.select, query.options)
|
||||
.exec((err, results) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
|
||||
if (results) {
|
||||
resolve(results);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
promise.then((results) => {
|
||||
e.emit('getRoles', null, results);
|
||||
})
|
||||
.catch((err) => {
|
||||
e.emit('getRoles', err, null);
|
||||
});
|
||||
},
|
||||
|
||||
getRole: (e, id) => {
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
RoleModel.find({_id: id}, (err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
|
||||
if (result) {
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
promise.then((result) => {
|
||||
e.emit('getRole', null, result);
|
||||
})
|
||||
.catch((err) => {
|
||||
e.emit('getRole', err, null);
|
||||
});
|
||||
},
|
||||
|
||||
updateRole: (e, id, role) => {
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
RoleModel.findByIdAndUpdate(id, { $set: role }, { new: true }, (err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
|
||||
if (result) {
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
promise.then((result) => {
|
||||
e.emit('updateRole', null, result);
|
||||
})
|
||||
.catch((err) => {
|
||||
e.emit('updateRole', err, null);
|
||||
});
|
||||
},
|
||||
|
||||
deleteRole: (e, id) => {
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
RoleModel.remove({ _id: id }, (err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
|
||||
if (result) {
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
promise.then((result) => {
|
||||
e.emit('deleteRole', null, result);
|
||||
})
|
||||
.catch((err) => {
|
||||
e.emit('deleteRole', err, null);
|
||||
});
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user