@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
TypeScript
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;
}>;
}