nowjs-core
Version:
NowCanDo Javascript Core [nowjs-core] is a library written by TypeScript code maintains under Apache 2.0 licence
59 lines (58 loc) • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const SecurityException_1 = require("./SecurityException");
class SecurityManager {
static get DefaultProvider() {
return SecurityManager.securityProviders.get(SecurityManager.defaultName);
}
static get DefaultProviderName() {
return SecurityManager.defaultName || '';
}
static getSecurityProvider(name) {
return SecurityManager.securityProviders.get(name || SecurityManager.defaultName);
}
static registerSecurityProviders(defaultName, ...securityProviders) {
SecurityManager.defaultName = defaultName;
securityProviders.map(xx => SecurityManager.securityProviders.set(xx.name, xx));
}
}
exports.SecurityManager = SecurityManager;
SecurityManager.securityProviders = new Map();
async function authorized(options) {
const that = this;
const context = this.context;
const user = context && context.user;
const settings = options || {};
settings.type = settings.type || 'hasAny';
if (!context) {
return Promise.reject(new SecurityException_1.SecurityException(-4005, 'Application context not defined'));
}
if (!user) {
return Promise.reject(new SecurityException_1.SecurityException(-4006, 'Application context user not defined'));
}
if (!user.isAuthenticated) {
return Promise.reject(new SecurityException_1.SecurityException(-4007, 'User not authenticated'));
}
const claims = {
roles: settings.roles,
resources: settings.resources,
users: settings.users,
};
const sp = SecurityManager.getSecurityProvider(settings.providerName || SecurityManager.DefaultProviderName);
if (sp) {
switch (settings.type) {
case 'hasAny':
return sp.hasAnyClaims.apply(that, claims);
case 'hasAll':
return sp.hasAllClaims.apply(that, claims);
case 'except':
return sp.exceptClaims.apply(that, claims);
default:
return Promise.resolve(false);
}
}
else {
return Promise.resolve(false);
}
}
exports.authorized = authorized;