154 lines
3.2 KiB
JavaScript
154 lines
3.2 KiB
JavaScript
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) => {
|
|
var [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);
|
|
});
|
|
}
|
|
};
|