@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
57 lines • 2.08 kB
JavaScript
import { DefaultLogger, IAM, InMemoryAdapter, defaultPolicyEvaluator, defaultConditionOperators } from '../index.js';
const policy = {
id: 'p1',
name: 'AllowRead',
statements: [
{
effect: 'Allow',
actions: ['read'],
resources: ['doc:1'],
},
],
};
const role = {
id: 'r1',
name: 'reader',
policyIds: ['p1'],
};
const user = {
id: 'u1',
roleIds: ['r1'],
policyIds: [],
};
const adapter = new InMemoryAdapter({ users: [user], roles: [role], policies: [policy] });
const logger = new DefaultLogger('debug');
const iam = new IAM({
storage: adapter,
evaluatorFunc: defaultPolicyEvaluator,
config: { logger, logLevel: 'debug' },
});
async function main() {
const result = await iam.can({ user, action: 'read', resource: 'doc:1' });
console.log('Decision:', result.decision);
console.log('Trace:', result.trace);
const denied = await iam.can({ user, action: 'write', resource: 'doc:1' });
console.log('Decision:', denied.decision);
console.log('Trace:', denied.trace);
const context = {
num: 10,
str: 'hello world',
arr: [1, 2, 3],
regexStr: 'abc123',
};
const operators = defaultConditionOperators;
console.log('eq:', operators.eq('num', 10, context));
console.log('ne:', operators.ne('num', 5, context));
console.log('gt:', operators.gt('num', 5, context));
console.log('lt:', operators.lt('num', 20, context));
console.log('gte:', operators.gte('num', 10, context));
console.log('lte:', operators.lte('num', 10, context));
console.log('in:', operators.in('num', [5, 10, 15], context));
console.log('contains (string):', operators.contains('str', 'world', context));
console.log('contains (array):', operators.contains('arr', 2, context));
console.log('regex (RegExp):', operators.regex('regexStr', /^abc\d+$/, context));
console.log('regex (string):', operators.regex('regexStr', 'abc', context));
}
main().catch(console.error);
//# sourceMappingURL=plain-example.js.map