Skip to content

Permify/permify-node

Permify logo
Permify NodeJS Client

GitHub package.json version  Permify Licence  Permify Discord Channel 

This client makes it easy to interact with Permify from your Node.js application.

Installation

Use npm to install:

npm install @permify/permify-node

Use yarn to install (Please be aware that Yarn versions greater than v1.10.0 and less than v2 are not supported):

yarn add @permify/permify-node

How to use

Create a new tenant

import * as permify from "@permify/permify-node";

const client = permify.grpc.newClient({
    endpoint: "localhost:3478",
    cert: undefined,
    insecure: true
});

client.tenancy.create({
    id: "t1",
    name: "Tenant 1"
}).then((response) => {
    console.log(response);
    // handle response
})

Write Schema

import * as permify from "@permify/permify-node";

const client = permify.grpc.newClient({
    endpoint: "localhost:3478",
    cert: undefined,
    insecure: true
});

let schema = `
    entity user {}
    
    entity document {
       relation viewer @user
       
       action view = viewer
    }
`;

// Write the schema
client.tenancy.create({
    tenantId: "t1",
    schema: schema
}).then((response) => {
    // handle response
})

Write Relationships

import * as permify from "@permify/permify-node";

const client = permify.grpc.newClient({
    endpoint: "localhost:3478",
    cert: undefined,
    insecure: true
});

client.relationship.write({
    tenantId: "t1",
    metadata: {
        schemaVersion: ""
    },
    tuples: [{
        entity: {
            type: "document",
            id: "1"
        },
        relation: "viewer",
        subject: {
            type: "user",
            id: "1"
        }
    }]
}).then((response) => {
    // handle response
})

Check

import * as permify from "@permify/permify-node";

const client = permify.grpc.newClient({
    endpoint: "localhost:3478",
    cert: undefined,
    insecure: true
});

client.permission.check({
    tenantId: "t1",
    metadata: {
        snapToken: "",
        schemaVersion: "",
        depth: 20
    },
    entity: {
        type: "document",
        id: "1"
    },
    permission: "view",
    subject: {
        type: "user",
        id: "3"
    }
}).then((response) => {
    if (response.can === PermissionCheckResponse_Result.RESULT_ALLOWED) {
        console.log("RESULT_ALLOWED")
    } else {
        console.log("RESULT_DENIED")
    }
})

Streaming Calls

import * as permify from "@permify/permify-node";

function main() {
    const client = permify.grpc.newClient({
        endpoint: "localhost:3478",
        cert: undefined,
        insecure: true
    });

    let res = client.permission.lookupEntityStream({
        tenantId: "t1",
        metadata: {
            snapToken: "",
            schemaVersion: "",
            depth: 20
        },
        entityType: "document",
        permission: "view",
        subject: {
            type: "user",
            id: "1"
        }
    })

    handle(res)
}

async function handle(res: AsyncIterable<permify.grpc.payload.PermissionLookupEntityStreamResponse>) {
    for await (const response of res) {
        // response.entityId
    }
}

Interceptors

Access Token Interceptor

import * as permify from "@permify/permify-node";

const client = new permify.grpc.newClient({
    endpoint: "localhost:3478",
    cert: undefined,
    insecure: true
}, permify.grpc.newAccessTokenInterceptor("YOUR_TOKEN"))

Certs

import * as permify from "@permify/permify-node";
import fs from 'fs';

const cert = fs.readFileSync('path/to/cert.pem');

const client = new permify.grpc.newClient({
    endpoint: "localhost:3478",
    cert: cert,
    insecure: true
}, permify.grpc.newAccessTokenInterceptor("YOUR_TOKEN"))

Permify is an open-source authorization service for creating and maintaining fine-grained authorizations accross your individual applications and services.

Community & Support

Join our Discord channel for issues, feature requests, feedbacks or anything else. We love to talk about authorization and access control ❤️

permify | Discord permify | Twitter permify | Linkedin