Code Monkey home page Code Monkey logo

acl-matrix's Introduction

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?

acl-matrix's People

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.