New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

casbin-pg-adapter

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

casbin-pg-adapter

PostgreSQL native adapter for Node-Casbin with advanced filter capability and improved performance.

  • 1.4.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
3.1K
decreased by-6.11%
Maintainers
1
Weekly downloads
 
Created
Source

PostgreSQL Casbin Adapter

NPM version NPM download Run Tests Coverage Status

PostgreSQL native adapter for Node-Casbin. With this library, Node-Casbin can load policy from PosgreSQL database or save policy to it. It supports loading filtered policies and is built for improving performances in PostgreSQL. It uses node-postgres to connect to PostgreSQL.

casbin-pg-adapter also adds advanced filtering capability. You can filter using LIKE or regexp expressions when using loadFilteredPolicy.

Installation

npm install casbin-pg-adapter

Simple example

import { newEnforcer } from "casbin";
import PostgresAdapter from "casbin-pg-adapter";

async function myFunction() {
    // Initialize a Postgres 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".
    // I think ORM should not automatically create databases.  
    const a = await PostgresAdapter.newAdapter({
        connectionString: "postgresql://casbin:casbin@localhost:5432/casbin"
    });

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

    // Load the policy from DB.
    await e.loadPolicy();

    // 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();
}

Filtering example

import { newEnforcer } from "casbin";
import PostgresAdapter from "casbin-pg-adapter";

async function myFunction() {
    const a = await PostgresAdapter.newAdapter({
        connectionString: "postgresql://casbin:casbin@localhost:5432/casbin"
    });

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

    // Load the filtered policy from DB.
    await e.loadFilteredPolicy({
        p: ["alice"],
        g: ["", "role:admin"]
    });

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

Advanced filtering example

import { newEnforcer } from "casbin";
import PostgresAdapter from "casbin-pg-adapter";

async function myFunction() {
    const a = await PostgresAdapter.newAdapter({
        connectionString: "postgresql://casbin:casbin@localhost:5432/casbin"
    });

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

    // Load the filtered policy from DB.
    await e.loadFilteredPolicy({
        p: ["regex:(role:.*)|(alice)"],
        g: ["", "like:role:%"]
    });

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

Configuration

You can pass any node-postgres options to the Adapter. See node-postgres documentation: Connecting to PostgreSQL.

Additional configurations

Avoid database migration

Additionnally, you can pass the following option to the Adapter:

  • migrate (Boolean): If set to false, the Adapter will not apply migration when starting.

Note: If you use this parameter, you should apply migration manually:

async function startup(): Promise<void> {
    PostgresAdapter.migrate({
        connectionString: "postgresql://casbin:casbin@localhost:5432/casbin"
    });
}

async function createEnforcer(): Promise<Enforcer> {
    const a = await PostgresAdapter.newAdapter({
        connectionString: "postgresql://casbin:casbin@localhost:5432/casbin",
        migrate: false
    });

    return newEnforcer("examples/rbac_model.conf", a);
}
Disabling filtered behavior

If you want to use the savePolicy feature from node-casbin, you have to disable the filtered behavior of PostgresAdapter. You can do it by calling enableFiltered on the adapter:

a.enableFiltered(false);

Getting Help

License

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

Keywords

FAQs

Package last updated on 08 Jun 2020

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

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc