{"_id":"@allstar/hemera-acl","_rev":"6-4a3c3453399a713bd859dd607b3a7e3e","name":"@allstar/hemera-acl","description":"Access control pluging for hemera applications","dist-tags":{"latest":"4.1.0"},"versions":{"1.0.1":{"name":"@allstar/hemera-acl","version":"1.0.1","description":"Access control pluging for hemera applications","main":"index.js","scripts":{"test":"tap -j4 -Rtap test --cov"},"repository":{"type":"git","url":"git+https://bitbucket.org/hitlist/hemera-acl.git"},"keywords":["ACL","permissions","role","acl","'access","control'"],"author":{"name":"Eric Satterwhite","email":"esatterwhite@wi.rr.com"},"license":"MIT","homepage":"https://bitbucket.org/hitlist/hemera-acl#readme","dependencies":{"hemera-plugin":"0.0.17"},"devDependencies":{"nats":"^0.7.24","nats-hemera":"^2.3.1","tap":"^10.7.2"},"gitHead":"e0d4da10ed708e6d1b77828a2eb4c312016edcc7","_id":"@allstar/hemera-acl@1.0.1","_npmVersion":"5.3.0","_nodeVersion":"8.4.0","_npmUser":{"name":"esatterwhite","email":"esatterwhite@wi.rr.com"},"dist":{"integrity":"sha512-mbhXr+BALbh6wbdFKRk9laLCVVpg5CIYQuC7Eq4wgciR6HlAJ54CMN++ETo5CWDWlMwy7DlUxOiDjcLbkckyLg==","shasum":"6f072bf6e5556fa92c6bbbf7afb1f135f77078f5","tarball":"https://registry.npmjs.org/@allstar/hemera-acl/-/hemera-acl-1.0.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGYnTwQvqDIsrVijBQw9YVddHK0vWrhrXA9NdlovD9BfAiBYohA/53tnktCkIWwx9tglIZqOQp6h8sCPbolx/JH6Ew=="}]},"maintainers":[{"name":"esatterwhite","email":"esatterwhite@wi.rr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hemera-acl-1.0.1.tgz_1508685086879_0.16610975214280188"},"directories":{}},"2.0.1":{"name":"@allstar/hemera-acl","version":"2.0.1","description":"Access control pluging for hemera applications","main":"index.js","scripts":{"test":"tap -j4 -Rtap test --cov"},"repository":{"type":"git","url":"git+https://bitbucket.org/hitlist/hemera-acl.git"},"keywords":["ACL","permissions","role","acl","'access","control'"],"author":{"name":"Eric Satterwhite","email":"esatterwhite@wi.rr.com"},"license":"MIT","homepage":"https://bitbucket.org/hitlist/hemera-acl#readme","dependencies":{"hemera-plugin":"^0.1.1"},"devDependencies":{"nats":"^0.7.29","nats-hemera":"^3.2.0","tap":"^10.7.2"},"gitHead":"26e50c40ca2c058e360addf7d84f074c1f39a81f","_id":"@allstar/hemera-acl@2.0.1","_npmVersion":"5.5.1","_nodeVersion":"8.9.3","_npmUser":{"name":"esatterwhite","email":"esatterwhite@wi.rr.com"},"dist":{"integrity":"sha512-M+AQNMx81b+scp3L1h2Dc+d9VLaNmHDdUjOwB20vXZ2WrW9fvTCr8OqD1+vqjJYgYLDb3pTaVsv4N0XzTI3Mnw==","shasum":"4dc6193460a13a0678ce4aa4f9fb48f42e5eccf7","tarball":"https://registry.npmjs.org/@allstar/hemera-acl/-/hemera-acl-2.0.1.tgz","fileCount":5,"unpackedSize":7537,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEy1AwRmP4JYmHoniYpCg8odyHPyDZE8mRNkOdVu9JkXAiEAkQX4ReM9dL6FRtNxTlC2IJx10scaOxqiDfzAbDwqT10="}]},"maintainers":[{"name":"esatterwhite","email":"esatterwhite@wi.rr.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hemera-acl_2.0.1_1519963736444_0.8554977887440611"},"_hasShrinkwrap":false},"3.0.0":{"name":"@allstar/hemera-acl","version":"3.0.0","description":"Access control pluging for hemera applications","main":"index.js","scripts":{"test":"tap -j4 -Rtap test --cov"},"repository":{"type":"git","url":"git+https://bitbucket.org/hitlist/hemera-acl.git"},"keywords":["ACL","permissions","role","acl","'access","control'"],"author":{"name":"Eric Satterwhite","email":"esatterwhite@wi.rr.com"},"license":"MIT","homepage":"https://bitbucket.org/hitlist/hemera-acl#readme","dependencies":{"hemera-plugin":"^1.3.0"},"devDependencies":{"nats":"^0.7.29","nats-hemera":"^5.4.2","tap":"^10.7.2"},"gitHead":"488896ea7763b03363645240a98081e58ab3bdcd","_id":"@allstar/hemera-acl@3.0.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"esatterwhite","email":"esatterwhite@wi.rr.com"},"dist":{"integrity":"sha512-xNGnpo/gZOTFl51+U+n8Y7mDl6jXXTPnCtU54ndsQ0h5vZrPZreOSaWvW8dA4H3fMBH0S+mU9iLNZrmoPqfJ0g==","shasum":"f0f15bb1a15ce0674364ce29d3af1110a82e47e0","tarball":"https://registry.npmjs.org/@allstar/hemera-acl/-/hemera-acl-3.0.0.tgz","fileCount":5,"unpackedSize":7566,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa3RFvCRA9TVsSAnZWagAAK/0QAIWiyN28TUYuzs/N67Lu\ngKS346daSUxL9z8Dbec2MX7jSIJi9uAHONYpF3eE0VjvAN3kiENKUbz42pFk\nNWwRbFT6EtyWsvY0rZnf6tFGD7VGHvtXfE2BdXy/MBa2V+5yoeNLm0u/3ucJ\n6FdqHT7IrcG9nNVS20wvnnDh4PlDXn9sY+jOypMjJYlTD4IO1e2SxnvtEna1\ny19zw5nT8MzhkLonLXjbC+zMGT/WDsfHTSLmY0pDi1V4efacNMq/b0R+2Ws+\nErOb+8Maa9gQ4oBAh93/nUQ4d0YA9qn4vOKjYqaryAwNLpqwHsGoxiHxbNtB\n4jhumFjKDIejg46X7CEbbHw2V2TLA8lyJTOScA+wHjJqf5YUtXAYjdXHGKra\n1Zn44q7cJA54/a3BXrjCmXk7eB6w/6tgkARReR7r6UN/O/f0X+lhkaOcXj5o\njlwHbqZ5sRKvSIlPhxnkaTcfw8r/017C9/XtCrQogTNFkR7STVsO0ux5z9JL\nbzRzcCK3yPr4VCzgcHRinzlOovNQulzlNiII5ierMgUP+ogpwmLNpac2TF//\nBmGYeTbqJ4t/WjIb/swv583tcEdIYABYfOGyvhgr12990jwbJ7s5JSPveS8V\n60tgllIgj+X9Nx3y7oqusMU7gofRGH2bFWrmohSdeMf8cDHoZVjbQZS/TDj8\nthqw\r\n=34hK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCT0lRkxHCNBDYE/3njKTI6iI4CbiKE8stmTAQc2v7Q1wIhAIBuu/graFIlwlulqWG+2KWAmtqA9htbY5uGUElcNp2S"}]},"maintainers":[{"name":"esatterwhite","email":"esatterwhite@wi.rr.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hemera-acl_3.0.0_1524437358456_0.4930555427449439"},"_hasShrinkwrap":false},"4.0.0":{"name":"@allstar/hemera-acl","version":"4.0.0","description":"Access control pluging for hemera applications","main":"index.js","scripts":{"test":"tap -j4 -Rtap test --cov"},"repository":{"type":"git","url":"git+https://bitbucket.org/hitlist/hemera-acl.git"},"keywords":["ACL","permissions","role","acl","'access","control'"],"author":{"name":"Eric Satterwhite","email":"esatterwhite@wi.rr.com"},"license":"MIT","homepage":"https://bitbucket.org/hitlist/hemera-acl#readme","dependencies":{"hemera-plugin":"^1.3.0"},"devDependencies":{"nats":"^0.7.29","nats-hemera":"^5.8.5","tap":"^10.7.2"},"gitHead":"d3dc18fdc5d792c9a6529466c18cd386cdb5fe8a","_id":"@allstar/hemera-acl@4.0.0","_npmVersion":"6.1.0","_nodeVersion":"10.5.0","_npmUser":{"name":"esatterwhite","email":"esatterwhite@wi.rr.com"},"dist":{"integrity":"sha512-VGv/wZOFd0ZK/Hg/32OKgPwLaaHls6AreuYZnNcW1FIKZt01KQjcoQXQ8y93qHwipry150PEY6Elm1jcJS/bGQ==","shasum":"cc5194b3d7459e83d6aceb8a0470588f32d81ca7","tarball":"https://registry.npmjs.org/@allstar/hemera-acl/-/hemera-acl-4.0.0.tgz","fileCount":5,"unpackedSize":7558,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbLcYRCRA9TVsSAnZWagAA8iQP/iVZ9tDzL7JEf4Kd1lVy\nN5UxK5BwW88BnpdquwVm08L0mNoUzQvHlmItVBNCZd3X9I6v316NNRDc/C0e\nCs+LzYTKf+pzLb+AGAAkArQ0tBrlnIaI/gAZFNVL5gLJ87022snN3ii88ntg\n6gB7jrA125IzPQbjAau0l3vGBNYdmL57Fd1upWMA+aO/rdI1wLR0w46WIfiM\n9KYXfJpjtIMVnRJ7mjwBdmEM1YcMo8NCkpeXGXBA6+6cRuJyCin+qSwr8Lux\nAVDgGKcXMpwFFRYJPwuiCxABMXFuWefnTQk7CrkmZtztWHPF5r1AY7lcrj70\nXUPSvvr7CEzYA9+v3neen7axuzHCqZHxLpkPVZTjV8DIOJ7d6vWcz7gvZQON\n/zycOxpO8XVFExEHicyH6gDb9VX2l0SuH8rayEnq2iqQSwnTqgYGfvCOgIYM\n2fsmbwFJtJKIrKjWThbFWYYUGyG7emzADi5fVw7u4KrCKPUB/D7YWYY8XK73\n1opYh6zJXj63u+FCP8Rb4hv0DXTGXyyIq9QTFXyNIf38KOj68ZHsk+7BdJRD\nw474ySkJGza/wzAJvT25nkwqTpu5DJpXTMHQSYSST3B3JhYkFPqJBmz5dD2I\ntObl5Ns6/r+izkk2uhkEw5dfHyOgZB91NgQbeolru3DBmsOgWOmbbdbVBnJ1\nri+d\r\n=hhT6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTshbwwqkvKf0P3L0IDCqp6A+hZSLAO9HT0yZPI9tc+wIhAPJ7GR8rGFRU4M52krzqHjtnn6fwz1hLnpTiyGJaFqyi"}]},"maintainers":[{"name":"esatterwhite","email":"esatterwhite@wi.rr.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hemera-acl_4.0.0_1529726481183_0.9200218076325768"},"_hasShrinkwrap":false},"4.1.0":{"name":"@allstar/hemera-acl","version":"4.1.0","description":"Access control pluging for hemera applications","main":"index.js","scripts":{"test":"tap -j4 -Rtap test --cov"},"repository":{"type":"git","url":"git+https://bitbucket.org/hitlist/hemera-acl.git"},"keywords":["ACL","permissions","role","acl","'access","control'"],"author":{"name":"Eric Satterwhite","email":"esatterwhite@wi.rr.com"},"license":"MIT","homepage":"https://bitbucket.org/hitlist/hemera-acl#readme","dependencies":{"hemera-plugin":"^1.3.0","super-error":"^2.2.0"},"devDependencies":{"nats":"^0.7.29","nats-hemera":"^5.8.5","tap":"^10.7.2"},"gitHead":"687bd8cbc9c6b6307974ce9f6e05c4d4006e307c","_id":"@allstar/hemera-acl@4.1.0","_npmVersion":"6.1.0","_nodeVersion":"10.5.0","_npmUser":{"name":"esatterwhite","email":"esatterwhite@wi.rr.com"},"dist":{"integrity":"sha512-mbueWSuLOziVt+Wnl8ge6bxaWJSVI71CohI4tyYBwFE0NLiVZq7PDdfGxRSAxAOiSJNhD9Kc6xHoj518oOB3Vw==","shasum":"317f8cc15ec2cec72ad7c3e01e6e45a824698cef","tarball":"https://registry.npmjs.org/@allstar/hemera-acl/-/hemera-acl-4.1.0.tgz","fileCount":5,"unpackedSize":7793,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbMtXHCRA9TVsSAnZWagAAhJ0P/1dWEVWdFgKYD91gaaTw\nSmjyGn3vvuntG/j2/1xC9ns1yZQGzSDmqdMUAjaIq+5wDo7yDR2KEdZ3ltD1\nUeiv3WNiFYF+b4VB+9vboPeoQF/Sli4Z+8HXkl5i5UqjwXoLWGof/fLyrwOO\nEseSULSvhrYEtjXyGuJuu3hhIquUpieKuMDc33Lo4pQ1H06dGWn/fJ9j05R4\npfvewkBu7ML189FjezFEDmtmfvIM6PYrXJWNa/IHrNpTzYPcNOLg3SqQou9R\nPnNgQO4Tg2wzJzkZsm3mwHsnt4+15tVjdSr/yHo/kb4cWXe1utDERVTmpgzE\nkHiO04KlwT9s4EixyLk0zuokV3MBPFKYuyLgfWMJckqutqttbYzdos1fV5zZ\nnCDTVIk+HA46zTCyVQcrfV2ysZ8bKaixGEiHtoRCBKgvHEIAh+fUwiajslXe\n0Ti8LqABli7ILW0YZStZc/KuGtbI6vFYGrzN/H4iKtC5F9GaiA5Z2lR3ERIo\n8NhLYO330hoy3dpuPGAOpz1pCociRJKWrZaMjfVkiFQpdBPt7/oYzGzY2cdr\nbicNzMS1jGuq4s/QbwZjVwcf0cN/Iqf1WeIIctP6qtWynCZpYlqxLK+PhFhs\nuwje4TwLN2Zfnz/7UNwAz/9EiR1lrSP5a/lWqKx/jc96R65DtoPzcJ1L55Zt\nnoqZ\r\n=PiqF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAhOwp/TjEVOGGy4AwrkRLsINv0DsSqFFTljPgVBp0mgAiAi+XDUPLwemlY9qAIjNO7/sAPFHLnkr+E9J3IDu4f/og=="}]},"maintainers":[{"name":"esatterwhite","email":"esatterwhite@wi.rr.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hemera-acl_4.1.0_1530058183730_0.17201983829053624"},"_hasShrinkwrap":false}},"readme":"## Hemera ACL\n\nHemera pluging adding Access control via coarse based roles, or granular permissions\n\n### Installation\n\n```bash\n$ npm install @allstar/hemera-acl\n```\n\n### Usage\n\nBasic Setup\n\n```javascript\nconst Hemera = require('nats-hemera')\nconst nats = require('nats')\nconst Acl = require('@allstar/hemera-acl')\n\nconst nc = nats.connect({\n  servers: ['nats://0.0.0.0:4222']\n})\n\nconst hmera = new Hemera(nc)\nhemera.use(acl, {\n  separator: ':' // default\n})\n\nhemera.ready(() => {\n  // go!\n})\n```\n\n#### Roles\n\nFor coarse control, handlers can define a `roles` array (or single string) specifying the roles that are allowed\n\n```javascript\nhemera.add({\n  topic: 'math'\n, cmd: 'add'\n, auth$: {\n    roles: 'admin' // only admin access\n  }\n}, function(req, cb) {\n  // admin user\n  console.log(this.user$)\n  cb(null, true)\n})\n\nhemera.add({\n  topic: 'math'\n, cmd: 'subtract'\n, auth$: {\n    roles: ['admin', 'manager'] // admin OR manager access\n  }\n}, function(req, cb) {\n  // admin user\n  console.log(this.user$)\n  cb(null, true)\n})\n\nhemera.add({\n  topic: 'math'\n, cmd: 'divide'\n, auth$: {\n    roles: [] // no roles - superuser access only\n  }\n}, function(req, cb) {\n  // admin user\n  console.log(this.user$)\n  cb(null, true)\n})\n```\n\n##### Calling w/ roles\n\nAdding a `user`object to the hemera `metadata` with the `roles` array key populated to pass acl validation.\nRequest that do not pass authorization will return an `error` with the code **EAUTH**. Users with the special key **superuser**\nset tot `true` will always pass authorization\n\n```javascript\nhemera.act({\n  topic: 'math'\n, cmd: 'add'\n, meta$: {\n    user: {\n      roles: ['salesman', 'admin'] // passes authorization for the add handler\n    }\n  }\n}, function(err, res) {\n  console.log(res)\n})\n\nhemera.act({\n  topic: 'math'\n, cmd: 'subtract'\n, meta$: {\n    user: {\n      roles: ['grunt'] // fails validatin for the subtract handler\n    }\n  }\n}, function(err, res) {\n  console.log(err.code) // EAUTH\n})\n\nhemera.act({\n  topic: 'math'\n, cmd: 'divide'\n, meta$: {\n    user: {\n      superuser: true  // always authorized\n    }\n  }\n}, function(err, res) {\n  console.log('success!')\n})\n```\n\n#### Permissions\n\nPermissions allow you to specify an arbitry level of granularity from 1 level to as deep as you wish to go. Giving the **user** object\na nested `permissions` object will dictate what a user has access to. The terminal key in the object tree should be a boolean\nvalue (**true** or **false**). The absence of a key is equivelent to false\n\n\n```javascript\nconst user = {\n  roles: ['grunt']\n, permissions: {\n    auth: {\n      user: {\n        create: true\n      , read: true\n      , update: true\n      , delete: false\n      }\n    }\n  , blog: {\n      post: {\n        create: true\n      , update: true\n      , read: true\n      , delete: true\n      }\n    , tag: {\n        read: true\n      }\n    }\n  }\n}\n```\n\nTo mark a handler with the desired permission include a `permissions` key to the auth object.\n\n\n```javascript\nhemera.add({\n  topic: 'blog'\n, cmd: 'post'\n, auth$: {\n    permissions: 'blog:post:create' // need to permission to create blog posts\n  }\n}, function(req, cb) {\n  console.log(this.user$)\n  cb(null, true)\n})\n\nhemera.add({\n  topic: 'user'\n, cmd: 'delete'\n, auth$: {\n    permissions: 'one:very:very:specific:perm:only:few:people:have' // very granular permission\n  }\n}, function(req, cb) {\n  console.log(this.user$)\n  cb(null, true)\n})\n\nhemera.add({\n  topic: 'internal'\n, cmd: 'dangerous'\n, auth$: {\n    permissions: ' '  // super user only access (empty string)\n  }\n}, function(req, cb) {\n  console.log(this.user$)\n  cb(null, true)\n})\n```\n\n##### Calling with permissions\n\n```javascript\nhemera.act({\n  topic: 'math'\n, cmd: 'add'\n, meta$: {\n    user: {\n      permissions: {\n        auth: {\n          user: {\n            create: true\n          }\n        }\n      , one: {\n          very: {\n            very: {\n              specific: {\n                perm: {\n                  only: {\n                    few: {\n                      people: {\n                        have: true\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}, function(err, res) {\n  console.log(res)\n})\n```\n","maintainers":[{"name":"esatterwhite","email":"esatterwhite@wi.rr.com"}],"time":{"modified":"2022-04-04T13:34:47.666Z","created":"2017-10-22T15:11:27.902Z","1.0.1":"2017-10-22T15:11:27.902Z","2.0.1":"2018-03-02T04:08:57.013Z","3.0.0":"2018-04-22T22:49:18.573Z","4.0.0":"2018-06-23T04:01:21.251Z","4.1.0":"2018-06-27T00:09:43.852Z"},"homepage":"https://bitbucket.org/hitlist/hemera-acl#readme","keywords":["ACL","permissions","role","acl","'access","control'"],"repository":{"type":"git","url":"git+https://bitbucket.org/hitlist/hemera-acl.git"},"author":{"name":"Eric Satterwhite","email":"esatterwhite@wi.rr.com"},"license":"MIT","readmeFilename":"README.md"}