Notoriously Punctual Manatee

    casbin-pg-adapter
    TypeScript icon, indicating that this package has built-in type declarations

    1.4.0 • Public • Published

    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.

    Install

    npm i casbin-pg-adapter

    DownloadsWeekly Downloads

    1,044

    Version

    1.4.0

    License

    MIT

    Unpacked Size

    21.6 kB

    Total Files

    15

    Last publish

    Collaborators

    • mluce