Core API Reference
Complete API reference for @fire-shield/core.
RBAC Class
The main class for managing roles, permissions, and access control.
Constructor
new RBAC(options?: RBACOptions)Parameters
options(optional): Configuration optionsauditLogger?: AuditLogger- Custom audit loggerbitPermissions?: boolean- Enable bit-level permission checking (default: false)
Example
import { RBAC, BufferedAuditLogger } from '@fire-shield/core'
const rbac = new RBAC({
auditLogger: new BufferedAuditLogger(async (logs) => {
console.log('Audit logs:', logs)
}),
bitPermissions: true
})Methods
createRole
Create a new role with permissions.
createRole(roleName: string, permissions: string[]): voidParameters:
roleName- Name of the rolepermissions- Array of permission strings
Example:
rbac.createRole('admin', ['posts:*', 'users:*'])
rbac.createRole('editor', ['posts:read', 'posts:write'])deleteRole
Delete a role.
deleteRole(roleName: string): voidExample:
rbac.deleteRole('editor')grant
Grant additional permissions to an existing role.
grant(roleName: string, permissions: string[]): voidExample:
rbac.grant('editor', ['posts:delete'])revoke
Revoke permissions from a role.
revoke(roleName: string, permissions: string[]): voidExample:
rbac.revoke('editor', ['posts:delete'])hasPermission
Check if a user has a specific permission.
hasPermission(user: RBACUser, permission: string): booleanParameters:
user- User object with rolespermission- Permission string to check
Returns: true if user has permission, false otherwise
Example:
const user = { id: '1', roles: ['editor'] }
const canWrite = rbac.hasPermission(user, 'posts:write') // true
const canDelete = rbac.hasPermission(user, 'posts:delete') // falsesetRoleHierarchy
Define role inheritance chains.
setRoleHierarchy(hierarchy: Record<string, string[]>): voidParameters:
hierarchy- Object mapping roles to their parent roles
Example:
rbac.setRoleHierarchy({
admin: ['editor', 'moderator'],
editor: ['viewer'],
moderator: ['viewer']
})getRolePermissions
Get all permissions for a role (including inherited).
getRolePermissions(roleName: string): string[]Returns: Array of permission strings
Example:
const permissions = rbac.getRolePermissions('editor')
// ['posts:read', 'posts:write']getUserPermissions
Get all permissions for a user (across all roles).
getUserPermissions(user: RBACUser): string[]Returns: Array of permission strings
Example:
const user = { id: '1', roles: ['editor', 'moderator'] }
const permissions = rbac.getUserPermissions(user)Types
RBACUser
User object with role assignments.
interface RBACUser {
id: string
roles: string[]
[key: string]: any // Additional user properties
}Example:
const user: RBACUser = {
id: 'user-123',
roles: ['editor', 'moderator'],
email: 'user@example.com',
name: 'John Doe'
}RBACOptions
Configuration options for RBAC instance.
interface RBACOptions {
auditLogger?: AuditLogger
bitPermissions?: boolean
}AuditLogger
Interface for custom audit loggers.
interface AuditLogger {
log(event: AuditEvent): void | Promise<void>
}AuditEvent
Audit log event structure.
interface AuditEvent {
timestamp: Date
userId: string
action: 'permission_check' | 'role_grant' | 'role_revoke'
resource: string
permission?: string
result: boolean
metadata?: Record<string, any>
}Audit Logging
BufferedAuditLogger
Built-in audit logger with buffering.
new BufferedAuditLogger(
handler: (logs: AuditEvent[]) => Promise<void>,
options?: BufferedAuditLoggerOptions
)Parameters
handler- Function to process buffered logsoptions(optional):maxBufferSize?: number- Max buffer size (default: 100)flushIntervalMs?: number- Flush interval (default: 5000)
Example
import { BufferedAuditLogger } from '@fire-shield/core'
const auditLogger = new BufferedAuditLogger(
async (logs) => {
await saveLogsToDatabase(logs)
},
{
maxBufferSize: 50,
flushIntervalMs: 3000
}
)
const rbac = new RBAC({ auditLogger })Methods
flush
Manually flush buffered logs.
flush(): Promise<void>Example:
await auditLogger.flush()Custom Audit Logger
Implement custom audit logger:
class CustomAuditLogger implements AuditLogger {
async log(event: AuditEvent) {
console.log('Audit event:', event)
// Send to logging service
await fetch('/api/audit', {
method: 'POST',
body: JSON.stringify(event)
})
}
}
const rbac = new RBAC({
auditLogger: new CustomAuditLogger()
})RBAC Builder
Fluent API for building RBAC configurations.
import { RBACBuilder } from '@fire-shield/core'
const rbac = new RBACBuilder()
.role('admin')
.grant(['posts:*', 'users:*'])
.role('editor')
.grant(['posts:read', 'posts:write'])
.role('viewer')
.grant(['posts:read'])
.hierarchy({
admin: ['editor'],
editor: ['viewer']
})
.build()Methods
role
Start defining a role.
role(name: string): RBACBuildergrant
Grant permissions to current role.
grant(permissions: string[]): RBACBuilderhierarchy
Set role hierarchy.
hierarchy(hierarchy: Record<string, string[]>): RBACBuilderbuild
Build and return RBAC instance.
build(): RBACUtilities
matchPermission
Check if permission matches pattern (including wildcards).
import { matchPermission } from '@fire-shield/core'
matchPermission('posts:write', 'posts:*') // true
matchPermission('posts:write', 'posts:read') // false
matchPermission('admin:users:delete', 'admin:*') // trueparsePermission
Parse permission string into parts.
import { parsePermission } from '@fire-shield/core'
const parts = parsePermission('posts:write')
// { resource: 'posts', action: 'write' }
const nested = parsePermission('admin:users:delete')
// { resource: 'admin:users', action: 'delete' }Error Handling
RBACError
Base error class for RBAC errors.
class RBACError extends Error {
constructor(message: string, public code: string) {
super(message)
this.name = 'RBACError'
}
}Common Errors
// Permission denied
throw new RBACError('Insufficient permissions', 'PERMISSION_DENIED')
// Role not found
throw new RBACError('Role does not exist', 'ROLE_NOT_FOUND')
// Invalid permission format
throw new RBACError('Invalid permission format', 'INVALID_PERMISSION')Performance
Bit-Level Permissions
Enable bit-level permission checking for better performance:
const rbac = new RBAC({ bitPermissions: true })
// Permissions are stored as bits
// Much faster for large permission sets
rbac.createRole('admin', ['posts:*'])
const user = { id: '1', roles: ['admin'] }
rbac.hasPermission(user, 'posts:write') // Optimized bit checkCaching
RBAC automatically caches:
- Role permissions
- Role hierarchy resolution
- User permission sets
// First call - computes and caches
rbac.hasPermission(user, 'posts:write')
// Subsequent calls - uses cache
rbac.hasPermission(user, 'posts:write') // Fast
rbac.hasPermission(user, 'posts:delete') // FastNext Steps
- Learn about Permissions
- Explore Framework Integrations
- Check out Examples
