UNPKG

@fajarnugraha37/nope-iam

Version:

A highly extensible, type-safe IAM-like access control library for Node.js, inspired by AWS IAM. Deny by default, allow by vibes and less patience for your bad access patterns. Supports policies, roles, decorators, adapters, and rich evaluation context be

74 lines 2.34 kB
import { DefaultLogger } from '../core/logger.js'; export class InMemoryAdapter { users; roles; policies; logger; constructor(options = {}) { this.users = new Map(options.users?.map(u => [u.id, u]) ?? []); this.roles = new Map(options.roles?.map(r => [r.id, r]) ?? []); this.policies = new Map(options.policies?.map(p => [p.id, p]) ?? []); const config = options.config; this.logger = options.logger || config?.logger || new DefaultLogger(options.logLevel || config?.logLevel); this.logger.debug('InMemoryAdapter initialized', options); } async getUser(id) { this.logger.debug('getUser', id); return this.users.get(id); } async getUsers(ids) { this.logger.debug('getUsers', ids); return ids.map(id => this.users.get(id)).filter(Boolean); } async *getAllUsers() { this.logger.debug('getAllUsers'); for (const user of this.users.values()) yield user; } async getRole(id) { this.logger.debug('getRole', id); return this.roles.get(id); } async getRoles(ids) { this.logger.debug('getRoles', ids); return ids.map(id => this.roles.get(id)).filter(Boolean); } async *getAllRoles() { this.logger.debug('getAllRoles'); for (const role of this.roles.values()) yield role; } async getPolicy(id) { this.logger.debug('getPolicy', id); return this.policies.get(id); } async getPolicies(ids) { this.logger.debug('getPolicies', ids); return ids.map(id => this.policies.get(id)).filter(Boolean); } async *getAllPolicies() { this.logger.debug('getAllPolicies'); for (const policy of this.policies.values()) yield policy; } async saveUser(user) { this.logger.debug('saveUser', user); this.users.set(user.id, user); } async saveRole(role) { this.roles.set(role.id, role); } async savePolicy(policy) { this.policies.set(policy.id, policy); } async deleteUser(id) { this.users.delete(id); } async deleteRole(id) { this.roles.delete(id); } async deletePolicy(id) { this.policies.delete(id); } } //# sourceMappingURL=inMemoryAdapter.js.map