UNPKG

solid-permissions

Version:

Web Access Control based permissions library

79 lines (74 loc) 2.58 kB
'use strict'; /** * @module permissions */ var PermissionSet = require('./permission-set'); var Authorization = require('./authorization'); var aclModes = require('./modes'); /** * Clears (deletes) an ACL resource for a given resource url. * Usage: * * ``` * solid.clearPermissions('https://alice.example.com/docs/file1') * .then(function (result) { * // Now the ACL resource at file1.acl is deleted * }) * ``` * @method clearPermissions * @param resourceUrl {String} URL of a resource (not its ACL) * @return {Promise<PermissionSet>} */ function clearPermissions(resourceUrl, webClient) { var aclResourceUrl; return webClient.head(resourceUrl).then(function (response) { aclResourceUrl = response.aclAbsoluteUrl(); if (!aclResourceUrl) { throw new Error('ACL URL not found for resource.'); } return webClient.del(aclResourceUrl); }); } /** * Fetches and returns a PermissionSet initialized from an ACL resource. * Usage: * * ``` * solid.getPermissions('https://alice.example.com/docs/file1') * .then(function (permissionSet) { * // loads the PermissionSet instance, parsed from file1.acl for example * // now you can edit it and save it * return permissionSet * .addPermission(aliceWebId, [solid.acl.READ, solid.acl.WRITE]) * .addPermission(aliceWebId, solid.acl.CONTROL) * .addPermission(solid.acl.EVERYONE, solid.acl.READ) * .save() * }) * ``` * @method getPermissions * @param resourceUrl {String} URL of a resource (not its ACL) * @return {Promise<PermissionSet>} */ function getPermissions(resourceUrl, webClient, rdf) { var aclResourceUrl; var permissions; return webClient.head(resourceUrl).then(function (response) { aclResourceUrl = response.aclAbsoluteUrl(); if (!aclResourceUrl) { throw new Error('ACL URL not found for resource.'); } permissions = new PermissionSet(resourceUrl, aclResourceUrl, response.isContainer(), { rdf: rdf, webClient: webClient }); return webClient.get(aclResourceUrl).then(function (response) { return response.parsedGraph(); }); }).then(function (aclGraph) { permissions.initFromGraph(aclGraph); return permissions; }); } module.exports.clearPermissions = clearPermissions; module.exports.getPermissions = getPermissions; module.exports.PermissionSet = PermissionSet; module.exports.Authorization = Authorization; // Export all the acl-related constants and modes at the top (index) level Object.assign(module.exports, aclModes.acl);