Code Monkey home page Code Monkey logo

backkit-fineacl's Introduction

Build Status

What ?

FineACL is a fine grained ACL library for node

What ???

FineACL is a document/row level access contol library that handles per user, per resource, user defined ACLs.

Why

Sometimes you need to contol access to a single dynamic resource or a dynamic set of resources, which can be challenging since most frameworks and ACL libraries assume that you want a veyr simple role based ACL to access static resource groups.

Why ???

Here is a list of real life usecases where this type library could be used:

  • allow read access to a google drive document
  • allow a user to commit into a git repository
  • allow a group of users to list particular folder
  • allow a group of users to review and merge commits
  • allow a user to contribute to my trello board
  • allow a user to access my slack channel

Run tests

Tests are written using mocha, you can run it using:

npm test

Quickstart

Install

npm install fineacl --save
const fineacl = require('fineacl');

Acl instance

let acl = fineacl();

Resource

First, let's define our resource types.

acl.resource("REPOSITORY", {

    // define available permissions
    permissions: {
        READ:   "Gives read only access to the repository",
        REVIEW: "Gives review publish ability",
        MERGE:  "Gives merge access to any branch of the repository",
        ADMIN:  "Gives full access to any operation on the repository"
    });

Relationship

A relationship between a user and a resource is a key concept in fineacl.

let rel = acl.rel({
	userId: 1234,
	resourceType: "REPOSITORY",
	resourceId: 5678,
	permissions: ["READ", "REVIEW", "MERGE"]
});

Once we defined a relationship, we can check its existence with assert method:

rel.assert((err, exists) => {
	console.log(exists?"access to resource granted":"access to resource denied")
});

We can enforce this relationship, using sync method, to add new permissions, while keeping existing ones:

rel.sync((err, success) => {
	console.log(success?"access granted":"can't grant access, check err")
});

Alternatively we can enforce this relationship, using replace method, to replace existing ones:

rel.replace((err, success) => {
	console.log(success?"access granted":"can't grant access, check err")
});

We can remove this relationship, using break method:

rel.break((err, success) => {
	console.log(success?"relationship broken successfully":"can't break relationship, check err")
});

backkit-fineacl's People

Contributors

dchapkine 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.