Sequelize Guard

Configuration

Learn how to configure Sequelize Guard to fit your application's needs.

Sequelize Guard offers flexible configuration options to customize its behavior.

Constructor Options

When creating a new SequelizeGuard instance, you can pass configuration options:

import { SequelizeGuard } from 'sequelize-guard';
import { Sequelize } from 'sequelize';

const sequelize = new Sequelize(/* ... */);

const guard = new SequelizeGuard(sequelize, {
  prefix: 'app_',
  cache: {
    enabled: true,
    ttl: 300,
    checkPeriod: 600,
  },
  models: {
    user: 'User',
    role: 'Role',
    permission: 'Permission',
    resource: 'Resource',
    roleUser: 'RoleUser',
    rolePermission: 'RolePermission',
  },
});

Configuration Options

Table Prefix

Add a prefix to all Guard-related table names:

const guard = new SequelizeGuard(sequelize, {
  prefix: 'app_', // Tables will be: app_guard_users, app_guard_roles, etc.
});

Cache Configuration

Control the caching behavior:

const guard = new SequelizeGuard(sequelize, {
  cache: {
    enabled: true, // Enable/disable caching
    ttl: 300, // Time to live in seconds (default: 300)
    checkPeriod: 600, // Check period for expired keys (default: 600)
  },
});

Disable Cache

const guard = new SequelizeGuard(sequelize, {
  cache: {
    enabled: false,
  },
});

Custom Model Names

Customize the names of the Guard models:

const guard = new SequelizeGuard(sequelize, {
  models: {
    user: 'AppUser',
    role: 'AppRole',
    permission: 'AppPermission',
    resource: 'AppResource',
    roleUser: 'AppRoleUser',
    rolePermission: 'AppRolePermission',
  },
});

Environment-Based Configuration

Create different configurations for different environments:

import { Sequelize } from 'sequelize';
import { SequelizeGuard } from 'sequelize-guard';

interface GuardConfig {
  prefix?: string;
  cache?: {
    enabled: boolean;
    ttl?: number;
    checkPeriod?: number;
  };
}

const configs: Record<string, GuardConfig> = {
  development: {
    prefix: 'dev_',
    cache: {
      enabled: true,
      ttl: 60, // Short TTL for development
    },
  },
  production: {
    prefix: 'prod_',
    cache: {
      enabled: true,
      ttl: 600, // Longer TTL for production
    },
  },
  test: {
    prefix: 'test_',
    cache: {
      enabled: false, // Disable cache for testing
    },
  },
};

export function createGuard(sequelize: Sequelize) {
  const env = process.env.NODE_ENV || 'development';
  const config = configs[env] || configs.development;

  return new SequelizeGuard(sequelize, config);
}

Advanced Configuration

Custom Sequelize Options

You can pass custom Sequelize options when initializing:

const sequelize = new Sequelize({
  dialect: 'postgres',
  host: 'localhost',
  database: 'myapp',
  username: 'user',
  password: 'pass',
  pool: {
    max: 10,
    min: 0,
    acquire: 30000,
    idle: 10000,
  },
  logging: false,
});

const guard = new SequelizeGuard(sequelize);

Transaction Support

Use transactions with Guard operations:

const transaction = await sequelize.transaction();

try {
  const role = await guard.roles.createRole('admin', 'Administrator', {
    transaction,
  });

  const permission = await guard.permissions.createPermission(
    'create',
    'posts',
    'Can create posts',
    { transaction },
  );

  await guard.roles.assignPermission(role.id, permission.id, {
    transaction,
  });

  await transaction.commit();
} catch (error) {
  await transaction.rollback();
  throw error;
}

Best Practices

1. Use Environment Variables

Store sensitive configuration in environment variables:

import { Sequelize } from 'sequelize';
import { SequelizeGuard } from 'sequelize-guard';

const sequelize = new Sequelize(
  process.env.DB_NAME!,
  process.env.DB_USER!,
  process.env.DB_PASS!,
  {
    host: process.env.DB_HOST,
    dialect: 'postgres',
  },
);

const guard = new SequelizeGuard(sequelize, {
  cache: {
    enabled: process.env.CACHE_ENABLED === 'true',
    ttl: parseInt(process.env.CACHE_TTL || '300'),
  },
});

2. Enable Caching in Production

Always enable caching in production for better performance:

const guard = new SequelizeGuard(sequelize, {
  cache: {
    enabled: process.env.NODE_ENV === 'production',
    ttl: 600,
  },
});

3. Use Consistent Prefixes

Use table prefixes to avoid naming conflicts:

const guard = new SequelizeGuard(sequelize, {
  prefix: 'myapp_',
});

On this page