@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
JavaScript
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