npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@lunarj/p-gen

v1.2.9

Published

A command line to transform Hasura permissions into Casl-compatible ones.

Downloads

890

Readme

Description

A CLI to generate Casl permissions from a Hasura server.

Installation

NPM

npm i @lunarj/p-gen -D

Yarn

yarn add @lunarj/p-gen -D

Options

-s, --hasura-admin-secret indicates your Hasura server admin secret to connect to.

-ds, --data-source indicates the Hasura data source to fetch the permissions from. Defaults to "default"

-he, --hasura-endpoint-url indicates the Hasura server's location. Defaults to http://localhost:8080/v1/metadata, it is required to provide the full url including the /v1/metadata.

-f, --flat generates permissions without the Hasura roles mapping. It will be a plain array with the permissions without the role separation.

-jp, --json-path indicates the custom location to export the permissions JSON file.

-h, --help prints the help on the terminal

Understanding the config

There are 2 ways to generate the config file:

1- Run the CLI against a Hasura instance, the config file will be automatically generated for you with default values, customize the file, and then re-run the CLI to overwrite the previously created permissions.

2- You can manually generate the p-gen.config.ts file in the project root directory with the following content:

p-gen.config.ts

import type { Config } from '@lunarj/p-gen/dist';

const config: Config = {
  transformers: {
    action: (act: string) => {
      // Do your transformation.
      switch (act) {
        case 'insert_permissions':
          return 'INSERT';
        case 'update_permissions':
          return 'UPDATE';
        case 'select_permissions':
          return 'READ';
        case 'delete_permissions':
          return 'DELETE';

        default:
          return act;
      }
    },
    subject: (sub: string) => {
      // Do your transformation.
      return sub;
    },
  },
  replacements: {
    // Example
    'x-hasura-user-id': '${user.id}',
  },
  include: {
    // tableName: ['select_permissions']
  }
};

export default config;

The action property is used to customize the Casl action property. This function is called for every permission receiving the Hasura permission type as a parameter (insert_permissions, update_permissions, select_permissions, or delete_permissions)

The subject property is used to customize the Casl subject property. This function is called for every permission receiving the Hasura data source table as a parameter.

The include property filters the permissions you need to transform.

p-gen.config.ts

  {
    include: {
      users: ['insert_permissions']
    }
  }

In this example, the CLI will generate only the insert permissions from the user's table.

The replacements property is used to replace Hasura permission operators or session variables with custom values, for example: a permission using the X-Hasura-User-Id session variable will be replaced with '${user.id}' in the config shown above.

By default, the following operators will be transformed:

  _and: '$and',
  _or: '$or',
  _not: '$not',
  _eq: '$eq',
  _neq: '$ne',
  _in: '$in',
  _nin: '$nin',
  _gt: '$gt',
  _gte: '$gte',
  _lt: '$lt',
  _lte: '$lte',

This way the Casl instance will understand the operators as they are Mongodb Query operators.

Important Notes

To make the Casl instance understand the operators: $and, $or, and $not you need to follow the instructions from the Casl documentation

Usage

Locally installed

npx p-gen -s your-hasura-admin-secret

Globally installed

p-gen -s your-hasura-admin-secret

License

MIT licensed.