0.0.9 • Published 11 months ago

permify-node-demo v0.0.9

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
11 months ago

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:

yarn add @permify/permify-node

How to use

Create a new tenant

const permify = require("@permify/permify-node");

const client = new permify.grpc.newClient({
    endpoint: "localhost:3478",
})

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

Write Schema

const permify = require("@permify/permify-node");

const client = new permify.grpc.newClient({
    endpoint: "localhost:3478",
})

client.schema.write({
    tenantId: "t1",
    schema: `
    entity user {}
    entity document {
         relation viewer @user
         action view = viewer
    }
    `
}).then((response) => {
    // handle response
})

Write Relationships

const permify = require("@permify/permify-node");

const client = new permify.grpc.newClient({
    endpoint: "localhost:3478",
})

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

const permify = require("@permify/permify-node");
const {PermissionCheckResponse_Result} = require("@permify/permify-node/dist/src/grpc/generated/base/v1/service");

const client = new permify.grpc.newClient({
    endpoint: "localhost:3478",
})

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

const permify = require("@permify/permify-node");
const {PermissionLookupEntityStreamResponse} = require("@permify/permify-node/dist/src/grpc/generated/base/v1/service");

function main() {
    const client = new permify.grpc.newClient({
        endpoint: "localhost:3478",
    })

    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<PermissionLookupEntityStreamResponse>) {
    for await (const response of res) {
        // response.entityId
    }
}

Interceptors

Access Token Interceptor

const permify = require("@permify/permify-node");
const {newAccessTokenInterceptor} = require("@permify/permify-node/dist/src/grpc");

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

Certs

import {grpc as permifyGrpcClient} from "@permify/permify-node";
import {newAccessTokenInterceptor} from "@permify/permify-node/dist/src/grpc";
import fs from 'fs';

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

const client = new permifyGrpcClient.newClient({
    endpoint: "localhost:3478",
    cert: cert,
}, 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 :heart: