Socket
Book a DemoInstallSign in
Socket

casbin-basic-adapter

Package Overview
Dependencies
Maintainers
0
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

casbin-basic-adapter

A basic adapter supports pg, sqlite3, mysql, mysql2, oracledb and mssql

1.3.0
latest
npmnpm
Version published
Maintainers
0
Created
Source

Basic Adapter

ci NPM version NPM download

Basic Adapter is a basic driver adapter for Node-Casbin which supports pg, sqlite3, mysql, mysql2, and mssql. With this library, Node-Casbin can load policy from or save policy to supported persistence systems.

Drives

We currently support the following SQL systems:

  • pg
  • mysql
  • mysql2
  • sqlite3
  • oracledb
  • mssql

Installation

npm i casbin-basic-adapter

Simple Example

import { newEnforcer } from 'casbin';
import { Client } from 'pg';
import { BasicAdapter } from 'casbin-basic-adapter';

async function myFunction() {
  // Initialize a Basic adapter and use it in a Node-Casbin enforcer:
  // The adapter can not automatically create database.
  // But the adapter will automatically and use the table named "casbin_rule".
  const a = await BasicAdapter.newAdapter('pg',
    new Client({
      user: 'postgres',
      database: 'postgres',
      password: 'postgres',
    }));

  const e = await newEnforcer('examples/rbac_model.conf', a);

  // Check the permission.
  e.enforce('alice', 'data1', 'read');

  // Modify the policy.
  // await e.addPolicy(...);
  // await e.removePolicy(...);

  // Save the policy back to DB.
  await e.savePolicy();

Custom Table Name Example

By default, each adapter creates its own table in the database. While this might seem convenient, it poses a significant drawback when multiple adapters need to share the same database: policies cannot be shared across adapters if they are stored in separate tables.

Why Customization is Important

Compliance with Naming Conventions: Many production databases follow strict naming conventions. By customizing the table name, you can ensure that your adapter’s tables comply with these conventions, which is essential for production environments.

Shared Policies: When the same set of policies should be accessible by different adapters or services, having them in separate tables prevents a unified view. Customizing the table name allows you to consolidate policies into a single table that can be shared across adapters.

Avoiding Duplication: If each adapter creates its own table by default, it can lead to unnecessary duplication of data. This not only wastes storage space but can also lead to inconsistent policy enforcement across different parts of your application.

Simplified Management: With a single, customized table for all policies, managing, updating, and querying policy data becomes much easier. This is especially beneficial in environments where policies need to be audited or maintained centrally.

How to Customize the Table Name

Most adapters offer a configuration option to set the table name explicitly. For example:

import { newEnforcer } from 'casbin';
import { ConnectionPool } from 'mssql';
import { BasicAdapter } from 'casbin-basic-adapter';

const tableName = 'dbo.policies'// instead of the default 'casbin_rule'

async function myFunction() {
  const a = await BasicAdapter.newAdapter('mssql',
    new ConnectionPool({
      server: 'localhost',
      port: 1433,
      user: 'usr',
      password: 'pwd',
      database: 'casbin',
      options: {
        encrypt: true,
        trustServerCertificate: true,
      },
    }),
    tableName
  );

  const e = await newEnforcer('examples/rbac_model.conf', a);

  // Check the permission.
  e.enforce('alice', 'data1', 'read');

  // Modify the policy.
  // await e.addPolicy(...);
  // await e.removePolicy(...);

  // Save the policy back to DB.
  await e.savePolicy();

By setting the tableName option, you ensure that all adapters point to the same table, enabling seamless policy sharing and compliance with any required naming conventions.

Getting Help

  • Node-Casbin

License

This project is under Apache 2.0 License. See the LICENSE file for the full license text.

FAQs

Package last updated on 21 Feb 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.