permissio
v2.0.2
Published
<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://github.com/lvkdotsh/permissio/raw/master/public/permissio_white.webp" /> <img alt="permissio" src="https://github.com/lvkdotsh/permissio/raw/master/public/
Readme
A simplified general-purpose permissions system for node apps.
Table of Contents
Installation
Using npm:
npm install permissioor if you prefer to use the yarn package manager:
yarn add permissioor if you prefer to use the pnpm package manager:
pnpm add permissioUsage
Using Permissio simplifies permission manipulation and storage through the intelligent use of bitfields.
At its core, you will be able to create an enum for your permissions, so long as the value of which is an integer.
Next, one can call any of the functions involved.
import { hasPermission, grantPermission, EMPTY_PERMISSIONS } from 'permissio';
enum Permissions {
CREATE,
DELETE,
LIST,
USER_CREATE,
}
const steve = grantPermission(
EMPTY_PERMISSIONS,
Permissions.CREATE,
Permissions.DELETE,
Permissions.LIST
);
console.log(hasPermission(steve, Permissions.CREATE)); // true
console.log(hasPermission(steve, Permissions.DELETE)); // true
console.log(hasPermission(steve, Permissions.LIST)); // true
console.log(hasPermission(steve, Permissions.DELETE)); // true
console.log(hasPermission(steve, Permissions.USER_CREATE)); // falseThere is also a more class like interface for working with permissions.
import { createPermissions } from 'permissio';
enum Permissions {
CREATE,
DELETE,
LIST,
USER_CREATE,
}
// Let's crete steve's permissions starting with no permissions.
const steve = createPermissions();
steve.has(Permissions.CREATE); // false
// Let's grant him the permission.
steve.grant(Permissions.CREATE);
steve.has(Permissions.CREATE); // trueYou can read more about this class like interface here.
Documentation
hasPermission
Gathering whether permissiondata contains a certain permission is as easy as follows:
hasPermission(steve, Permissions.USER_CREATE);grantPermission
When you want to add a permission to permissiondata you can do that like so:
const permissionData = grantPermission(permissionData, Permissions.CREATE);The above code adds the Permissions.CREATE permission to the permissionData.
removePermission
When you want to remove a permission from permissiondata you can do that like so:
const permissionData = removePermission(permissionData, Permissions.CREATE);The above code removes the Permissions.CREATE permission from the permissionData.
toPermissionsBuffer
When you want to convert your permission to a buffer you can do that as follows:
const buffer = toPermissionsBuffer(permissionData);fromPermissionsBuffer
Likewise to toPermissionsBuffer you can also get the permissiondata from a buffer:
const permissionData = fromPermissionsBuffer(buffer);toPermissionsBitString
Converting the permissiondata to bitstring is as easy as:
const bitstring = toPermissionsBitString(permissionData);toString
Since permissionData is simply a BigInt, you can convert it to a string like so:
const string = permissionData.toString();createPermissions
As previously stated, this is a class like interface for working with permissions. It keeps track of the permissions and provides methods for manipulating them.
const permissions = createPermissions();createPermissions can optionally take in Permissions as the initial starting permissions.
// Using bigint as the initial permissions.
const permissions = createPermissions(BigInt(1));
// Using Enum
const permissions = createPermissions(EMPTY_PERMISSIONS, Permissions.CREATE);createPermissions returns an object that has the following methods:
- has (hasPermission)
- grant (grantPermission)
- remove (removePermission)
- toBigint
- toBuffer (toPermissionsBuffer)
- toBitString (toPermissionsBitString)
- toString
Remember that the returned object keeps track of the current permissions value by itself.
Contributors
LICENSE
This package is licensed under the GNU Lesser General Public License.
