solid-acl

Access Control List, the solid way

Usage no npm install needed!

<script type="module">
  import solidAcl from 'https://cdn.skypack.dev/solid-acl';
</script>

README

solid-acl

Access Control List, the solid way

Install

$ npm install --save solid-acl

Usage

var ACL = require('solid-acl')
var rdf = require('rdf-ext')
var FsStore = require('rdf-store-fs')

var store = new FsStore(rdf)
var acl = new ACL(rdf, store)

acl.allow(user, mode, resource, callback)

Strategies

AppendAcl

This is the default strategy. The idea is that each file x has an associated x.acl (where .acl can be specified in the options suffix).

The algorithm is the following:

can(user, mode, resource, options):
  acls = list possible acl paths
  // e.g.
  // http://foo.com/bar/yolo.acl
  // http://foo.com/bar/.acl
  // http://foo.com/.acl
  
  accessType = 'accessTo'
  for each acl path in acls:
    if acl file does not exist:
      // we look in the next acl that will be a parent path
      // and we look for defaultForNew presence
      accessType = 'defaultForNew'
      next
    
    policies = list policies in acl with mode == mode
    if mode == 'Append':
      policies = + list policies in acl with mode == 'Write'

    if policies in acl do not have accessTo the resource:
      return Error

    if options.origin is specified and acl does not have the same origin as the request the resource:
        return Error

    if acl has matching agent:
      return TRUE

    look for agentClass
    if agentClass found:
        return TRUE

    // if we are here it means that the file exists but has no matching policy
    return Error
  
  // if we are here,
  // it means no ACL file has been found
  return TRUE

License

MIT