UNPKG

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
"use strict"; 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;