UNPKG

@mamoorali295/rbac

Version:

Complete RBAC (Role-Based Access Control) system for Node.js with Express middleware, NestJS integration, GraphQL support, MongoDB & PostgreSQL support, modern admin dashboard, TypeScript support, and dynamic permission management

88 lines (87 loc) 3.72 kB
export interface DatabaseUser { id?: string; user_id: string; name: string; email: string; role_id?: string; role?: any; created_at?: Date; updated_at?: Date; } export interface DatabaseRole { id?: string; name: string; description: string; features?: any[]; created_at?: Date; updated_at?: Date; } export interface DatabaseFeature { id?: string; name: string; description: string; created_at?: Date; updated_at?: Date; } export interface DatabasePermission { id?: string; name: string; description: string; created_at?: Date; updated_at?: Date; } export interface FeaturePermissions { feature_id: string; permission_ids: string[]; } export interface PaginatedResult<T> { items: T[]; total: number; } /** * Abstract database adapter interface that all database implementations must follow. * This allows the RBAC system to work with different databases (MongoDB, PostgreSQL, etc.) */ export declare abstract class DatabaseAdapter { /** * Initialize the database connection and create standard permissions */ abstract init(): Promise<void>; /** * Create standard RBAC permissions if they don't exist */ abstract createStandardPermissions(): Promise<void>; abstract createUser(userData: DatabaseUser): Promise<DatabaseUser>; abstract findUserByUserId(user_id: string): Promise<DatabaseUser | null>; abstract findUserByUserIdWithRole(user_id: string): Promise<DatabaseUser | null>; abstract updateUser(user_id: string, updates: Partial<DatabaseUser>): Promise<void>; abstract deleteUser(user_id: string): Promise<void>; abstract getAllUsers(limit?: number, offset?: number, search?: string): Promise<PaginatedResult<DatabaseUser>>; abstract createRole(roleData: DatabaseRole): Promise<DatabaseRole>; abstract findRoleByName(name: string): Promise<DatabaseRole | null>; abstract findRoleById(id: string): Promise<DatabaseRole | null>; abstract findRoleByIdWithFeatures(id: string): Promise<DatabaseRole | null>; abstract updateRole(id: string, updates: Partial<DatabaseRole>): Promise<void>; abstract deleteRole(id: string): Promise<void>; abstract assignRoleFeaturePermissions(roleId: string, featurePermissions: FeaturePermissions[]): Promise<void>; abstract getAllRoles(limit?: number, offset?: number): Promise<PaginatedResult<DatabaseRole>>; abstract createFeature(featureData: DatabaseFeature): Promise<DatabaseFeature>; abstract findFeatureByName(name: string): Promise<DatabaseFeature | null>; abstract findFeatureById(id: string): Promise<DatabaseFeature | null>; abstract updateFeature(id: string, updates: Partial<DatabaseFeature>): Promise<void>; abstract deleteFeature(id: string): Promise<void>; abstract getAllFeatures(limit?: number, offset?: number): Promise<PaginatedResult<DatabaseFeature>>; abstract createPermission(permissionData: DatabasePermission): Promise<DatabasePermission>; abstract findPermissionByName(name: string): Promise<DatabasePermission | null>; abstract findPermissionById(id: string): Promise<DatabasePermission | null>; abstract updatePermission(id: string, updates: Partial<DatabasePermission>): Promise<void>; abstract deletePermission(id: string): Promise<void>; abstract getAllPermissions(limit?: number, offset?: number): Promise<PaginatedResult<DatabasePermission>>; abstract getUserFeaturePermissions(user_id: string, featureName: string): Promise<string[]>; abstract getDashboardStats(): Promise<{ users: number; roles: number; features: number; permissions: number; }>; }