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

acl-matrix

v1.0.4

Published

Use a matrix to describe your application's access control list (ACL)

Downloads

10

Readme

acl-matrix

Usage

  1. Install
npm install acl-matrix
  1. Require it
const AclMatrix = require('acl-matrix');

const roles = ['admin', 'member', 'guest'];
const resources = ['blog', 'comment'];
const allows = ['get', 'add', 'update', 'delete'];

// Each element in matrix stores the permissions of a role to a resource.
const matrix = [
    //   admin        member         guest
    [[1, 1, 1, 1], [1, 0, 1, 1], [1, 0, 0, 0]], // blog
    [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 0]], // comment
];

const acl = new AclMatrix(roles, resources, allows, matrix);

// 0
acl.isAllowed('member', 'blog', 'add');

// 1
acl.isAllowed('member', 'blog', 'get');

Concepts

  • roles are the types of user trying to access resources
  • allows describes the oprations user will need to do
  • matrix describes the allows relation between roles and resources;
  • third dimension of the matrix is an array of 0 and 1s, the length of array should equal to allows's. This array describes the permissions.

For example: in the above sample code, matrix[0][2] ([1, 0, 0, 0]) means the guest role is able to 'get' the 'blog' resource, but not others.

Parameter limits

  • Row number of matrix should eauql to resources length;
  • Collum number of matrix should eauql to role length;
  • Element number of matrix should eauql to allows length;

Pros and Cons

Pros

node_acl is good, but it acquires database to store the acls. And it is relatively hard to mantain and update acl using node_acl.

Benefits of using acl-matrix:

  1. Three dimensional matrix is the simplest way to store acl;
  2. Simple to config and simple for future change;
  3. No dependency, acl matrix can be easily shared between frontend and backend;
  4. Performance: no database needed, checking permissions is justing reading elemet in array

Cons

  1. By using node_acl you are able to save relations between users and roles. You will need to store the role of the user youself using acl-matrix
  2. By default, permissions of each roles are fixed, which is suitable for most projects. But if you want to allow user define the acl, you will need to store multiple acl matrices

TODOs

Add more method for the class maybe?