gypsum
Version:
Simple and easy lightweight typescript server side framework on Node.js.
79 lines • 3.23 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
const decorators_1 = require("../decorators");
const models_1 = require("../models");
const types_1 = require("../types");
let Roles = class Roles extends models_1.MongoModel {
_mCreateRootRole(user) {
this.$logger.info('creating default role');
let role = {
name: 'administrator',
users: [user._id],
permissions: ['*/*/*']
};
return Promise.resolve(role);
}
_mInsertRootRole(role) {
this.$logger.info('inserting default role');
this.collection.insertOne(role)
.then(() => { })
.catch(error => { throw 'Unable to create root user role: ' + error; });
}
onCollection() {
let usersModel = this.app.$getModel('users');
this.$logger.info('checking roles collection');
this.collection.find({})
.toArray()
.then(docs => {
if (!docs || !docs.length) {
this.$logger.info('no roles found');
usersModel.getRootUser()
.then((user) => {
if (user) {
this._mCreateRootRole(user)
.then((role) => this._mInsertRootRole(role))
.catch((error) => {
throw error;
});
}
else {
this.$logger.info('root user not found');
usersModel.createRootUser()
.then((user) => this._mCreateRootRole(user))
.then((role) => this._mInsertRootRole(role))
.catch((error) => {
throw error;
});
}
})
.catch((error) => {
throw error;
});
}
})
.catch(error => {
this.$logger.error('error while initializing roles model:', error);
throw error;
});
}
};
Roles = __decorate([
decorators_1.MODEL({
secure: true,
authorize: true,
domain: types_1.RESPONSE_DOMAINS.SELF,
schema: {
name: { $required: true, $type: 'string' },
users: { $required: true, $type: 'string[]' },
permissions: { $required: true, $type: 'string[]' }
}
})
], Roles);
exports.Roles = Roles;
//# sourceMappingURL=roles.js.map