Identity & Access Module (PostgreSQL Version) - Wiz-DevTech/prettygirllz GitHub Wiki
identity-access/ βββ π .github/ β βββ π workflows/ β βββ π οΈ pipeline.yml # CI/CD configuration β βββ π config/ β βββ π§ roles.js # RBAC role definitions β βββ βοΈ security.js # Encryption/JWT settings β βββ π server.js # HTTP/gRPC server config β βββ π core/ β βββ π auth/ β β βββ π authenticator.js # Main auth flow controller β β βββ π strategies/ β β β βββ πͺ jwt.js # JWT validation logic β β β βββ π oauth.js # Social login adapters β β βββ π§ͺ auth.spec.js # Auth unit tests β β β βββ π authz/ β β βββ π‘οΈ policy-manager.js # RBAC/ABAC policy engine β β βββ π permission-map.js # Action-to-role mappings β β βββ π§ͺ authz.spec.js β β β βββ π token/ β βββ πͺ token-provider.js # Token generation/refresh β βββ π§ͺ token.spec.js β βββ π adapters/ β βββ π http/ β β βββ π¦ auth-router.js # Express/Fastify routes β β βββ π‘οΈ rate-limiter.js # API request throttling β β βββ βοΈ error-handler.js # Standardized error responses β β β βββ π grpc/ β β βββ π auth.proto # Protocol Buffer schema β β βββ π server.js # gRPC service implementation β β βββ π§ͺ grpc.spec.js β β β βββ π database/ β βββ ποΈ user-repository.js # PostgreSQL operations β βββ ποΈ session-store.js # Active session management β βββ π models/ β βββ π€ user.js # Sequelize model + encryption hooks β βββ π api-key.js # Service account keys β βββ π lib/ β βββ π encryption.js # AES-256 field encryption β βββ π logger.js # Structured logging (JSON) β βββ π΅οΈ audit-trail.js # Security event tracking β βββ π index.js # Public API facade βββ π Dockerfile # Container build config βββ π README.md # Project documentation βββ π package.json # Dependencies + scripts
-
Core Authentication (
core/auth/
)-
authenticator.js
now uses PostgreSQL-aware queries:javascriptCopyDownloadasync function login(email, password) { // Uses Sequelize-style queries const user = await User.findOne({ where: { email: encryptedEmail }, paranoid: true // For soft-delete }); }
-
-
Database Adapter (
adapters/database/
)-
Updated with Sequelize models and transactions:
javascriptCopyDownload// user-repository.js async function createUser(userData) { return sequelize.transaction(async (t) => { return User.create({ ...userData, email: encrypt(userData.email), ssn: encrypt(userData.ssn) }, { transaction: t }); }); }
-
-
Security Config (
config/security.js
)javascriptCopyDownloadmodule.exports = { database: { dialect: 'postgres', ssl: process.env.NODE_ENV === 'production' }, // Rest remains same };
gRPC Adapter remains unchanged as it's database-agnostic
-
Database Layer Overhaul
Replaced Mongoose with Sequelize ORM
Updated all repository patterns to use PostgreSQL-compatible queries
Implemented transaction support using Sequelize
Added paranoid deletion (soft-delete) capabilities
-
Model Updates
javascriptCopyDownload// user.js (Sequelize model) module.exports = (sequelize, DataTypes) => { return sequelize.define('User', { email: { type: DataTypes.TEXT, allowNull: false, set(value) { this.setDataValue('email', encrypt(value)); }, get() { return decrypt(this.getDataValue('email')); } }, // ... other fields }, { paranoid: true, indexes: [{ unique: true, fields: ['email'] }] }); };
-
Session Management
Replaced MongoDB session store with PostgreSQL-compatible solution
Added connection pooling configuration
javascriptCopyDownload// database.js const sequelize = new Sequelize(process.env.POSTGRES_URI, { pool: { max: 5, min: 0, acquire: 30000, idle: 10000 }, dialectOptions: process.env.NODE_ENV === 'production' ? { ssl: { require: true } } : {} });
-
Testing Updates
Changed integration tests to use PostgreSQL test containers
Added transaction rollback in test teardowns
javascriptCopyDownloaddescribe('Auth Service', () => { let transaction;
beforeEach(async () => { transaction = await sequelize.transaction(); });
afterEach(async () => { await transaction.rollback(); }); });
-
New Security Features
Added SSL support for production database connections
Implemented column-level encryption using Sequelize hooks
Added index optimizations for frequently queried fields
This structure maintains all original functionality while leveraging PostgreSQL's strengths like transactions, ACID compliance, and advanced indexing capabilities. The migration from document-based storage to relational structure enables better data integrity and complex query support.