Immutable, static & dynamic flagsets for permissions.
λ bun add @zhaoworks/scopesimport { FlagScope, DynamicScope } from '@zhaoworks/scopes';
// keys = name, values = indexer
const rules = {
'post.read': 0,
'post.write': 1,
}
// use `FlagScope` for bitflags
const scope = new FlagScope(rules);
const user = scope.create({ 'post.read': true }); // ← type-safe!
if (scope.can('post.read', user)) {
console.log('(Post...)');
}
// use `DynamicScope` for set-based flags
const scope = new DynamicScope(rules); // ← both scopes shares the same interface (see ScopeInterface)
const user = scope.create({ 'post.read': true });
if (scope.can('post.read', user)) {
console.log('(Post...)');
}