{"_id":"@ahmsalah/acl-js","_rev":"2-dff9a79004c11a4dd1fbfd7031a1c1b1","name":"@ahmsalah/acl-js","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@ahmsalah/acl-js","version":"1.0.0","description":"Access control lists javascript library","main":"./lib/index.js","scripts":{"start":"npm-run-all --parallel babel:watch dev","dev":"nodemon lib/index.js","babel:watch":"babel src -d lib -w","build":"babel src -d lib","test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/ahmsalah/acl-js.git"},"author":{"name":"Ahmed Salah"},"license":"MIT","bugs":{"url":"https://github.com/ahmsalah/acl-js/issues"},"homepage":"https://github.com/ahmsalah/acl-js#readme","devDependencies":{"@babel/cli":"^7.10.1","@babel/core":"^7.10.2","@babel/plugin-proposal-class-properties":"^7.10.1","@babel/preset-env":"^7.10.2","nodemon":"^2.0.4","npm-run-all":"^4.1.5"},"dependencies":{},"gitHead":"5e115359e20ae9eb09c1554e36912f0160fecc6d","_id":"@ahmsalah/acl-js@1.0.0","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-WVHWoTnHucOKRQXGaAZt20LZozptnoXnlfuzlrfHlceS6UNU3eyapHZP4CSE46GLyb3gvlxU+CENNzT1xpSkGg==","shasum":"c0841ce06ca836d1f2b583349db5ba8f7eced13f","tarball":"https://registry.npmjs.org/@ahmsalah/acl-js/-/acl-js-1.0.0.tgz","fileCount":15,"unpackedSize":26869,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3V/BCRA9TVsSAnZWagAAEcEP/3h/lElNAoubQXzXp5RW\ncLGSuU7acWm9EqkVzVXWRt+TDpPzT6V8dD5pHBGZBuuQ2zEL60ybzb3aPdPi\nQpedYDUMLxNTWf8AXNvdbPjDmZ4zMDZO67KTLxxN1uCVstemaOQGvdsDq0Vy\nQToqVD7gzMj/NRIpO7tvvn/FTRzw2/q7bsJzlL1VLIwr4oyMRMiDLh4SEfmm\nWmAbRIJ3SxD/s9eb/VdUiUfvp4G32Ja8oF6PsB+JAIsXVNd9ujuKPRBUQ02t\nB9yrvttjXgASS9Do7NAtUlULv7HTO+0skH5F9P4WyofM66w0ayc1MO/yQQ38\n6sKdNJTGVaCjV2jb8IY4u6/3vDpUB18iW6QdozKWjyevpfA6EwxZe0QRfi1A\nOUsj98IJV6D2Gj4s5uUXPegIfwrN8iWJITVjFMkTtqO7epjN/5l77yvepS9S\n8JFsa708vnAh6E3bNC+UBzvNlO8Yw4E1vLZzjPMm+v0kjvRPN98e2Zg43BAc\nzbbj53hBGZCUoiZRF0wgcfoWZPMdI28WpmluTs0L65mgY2kBP/qOVdHzKBlt\nKykbszu2V4+VKznpkHi35RhT56GnhJeI1X0h/EnMtojlmmxv2APMprpYYZgQ\nusza+WblncEgiRMPub6dVzzmlUbj2/UJACaAnQFMzXVp6JeZ8kef0MTTwVaQ\n/aFZ\r\n=7mbH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBjV4bqtBPNRiDoGakCaim66TZLzsbv1NEanBtdKY1JxAiEAntJQe+JvlRY8kGpD0CgNzs3zJ+IXqXpfqgj3lJ/1ofc="}]},"maintainers":[{"name":"ahmsalah","email":"aemdsalah@gmail.com"}],"_npmUser":{"name":"ahmsalah","email":"aemdsalah@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/acl-js_1.0.0_1591566272667_0.7571791978981997"},"_hasShrinkwrap":false},"1.0.1":{"name":"@ahmsalah/acl-js","version":"1.0.1","description":"Access control lists javascript library","main":"./lib/index.js","scripts":{"start":"npm-run-all --parallel babel:watch dev","dev":"nodemon lib/index.js","babel:watch":"babel src -d lib -w","build":"babel src -d lib","test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/ahmsalah/acl-js.git"},"author":{"name":"Ahmed Salah"},"license":"MIT","bugs":{"url":"https://github.com/ahmsalah/acl-js/issues"},"homepage":"https://github.com/ahmsalah/acl-js#readme","devDependencies":{"@babel/cli":"^7.10.1","@babel/core":"^7.10.2","@babel/plugin-proposal-class-properties":"^7.10.1","@babel/preset-env":"^7.10.2","nodemon":"^2.0.4","npm-run-all":"^4.1.5"},"dependencies":{},"gitHead":"09afddf9ad002bd15a80520c9a6a2a6aaffa67f4","_id":"@ahmsalah/acl-js@1.0.1","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-4Qfe1NLIJav/XVx3MOnSpODdl6bELO1t5u0rJ3ENRkZ1mP6Xbnv7lBSq1VKUIM7ljiH+C2GSw15QOOnmipnxnA==","shasum":"6554292cced8955fe77f3dc72322301e3ef4e9ab","tarball":"https://registry.npmjs.org/@ahmsalah/acl-js/-/acl-js-1.0.1.tgz","fileCount":17,"unpackedSize":30196,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3i4QCRA9TVsSAnZWagAAAiUP/2CwxRek2+kwu4KSQtNJ\nWIlJq/LbgDxfxs/KviyF8z/stqY+OuEY64G5eImqfrxF27DP/UOyEdEmTXIY\n2sidpkwUf4tdsHbjQyL4GsSRpnNmD811SlBtqtvq4QtIcSzOgyEu3WMgzs2h\nNQ0BpApK8wG2CY1fthCQbNU9KQLnN5F0rkxTKmwGh/j0hxWZFULvwjVwFC4Y\nxJSZQWQ3hWunSPo1a5IOULRLu8jNrlkTgyMJNgWEqA9RLpRwHUaonrP7VspW\nTBTWUtdJl/IfgGtFfGT2VT1OabWcHprMvNy2Nl1AiV1MwGMLMRjlrf1L5koL\ns3CBbC+qsT3R4mu6YDTIM1o8e6sUw7t35CfjpHEb18NfVWnmXSbB6eOj+u9K\n1flVd0lxC2uEEXGQj879yFHW+RKMLcdz8qasE3vp/GEhcKZ0yUB/rYaOEF7V\nJoVwrpGbAqsjAB+Qzmn1k8ypoWDRvNBDOtLulnqwEFl4kfjnIBFdagF1o8WY\n8Fjg0EDjKdvAYKjB2VwSUS26/1HkhcWOoW4LY+wIdJ70YcB9g/gTkRQoGGdj\nrFEdlXqTG0dAFgvrLrDNWw79X+YFhOqu0CcX7SEsEa2iFyR/rRJIsyDcP6Fv\n+AWCODRUFo5Q0p1RRPE/80l8Ak5XiULy2spgMyXLRwurnWBnIW/f7EdGbpow\nFNHm\r\n=hPn0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpIpRz6sZSd5H6Ruk9t6KpFrQw3QOMRVj2yXGDuBQbxAIhAIveMp9Cjo99iLPhHsiqamwd86GQ+Nx6ica/MJSNZGfY"}]},"maintainers":[{"name":"ahmsalah","email":"aemdsalah@gmail.com"}],"_npmUser":{"name":"ahmsalah","email":"aemdsalah@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/acl-js_1.0.1_1591619087958_0.8447585219597311"},"_hasShrinkwrap":false}},"time":{"created":"2020-06-07T21:44:32.636Z","1.0.0":"2020-06-07T21:44:32.762Z","modified":"2022-04-04T12:13:35.306Z","1.0.1":"2020-06-08T12:24:48.132Z"},"maintainers":[{"name":"ahmsalah","email":"aemdsalah@gmail.com"}],"description":"Access control lists javascript library","homepage":"https://github.com/ahmsalah/acl-js#readme","repository":{"type":"git","url":"git+https://github.com/ahmsalah/acl-js.git"},"author":{"name":"Ahmed Salah"},"bugs":{"url":"https://github.com/ahmsalah/acl-js/issues"},"license":"MIT","readme":"# acl-js\n\nA lightweight access control lists (ACL) javascript implementation for privileges management.\n\n## Installation\n\nUsing **npm**\n\n```bash\nnpm install @ahmsalah/acl-js\n```\n\n## Usage\n\nHere is a quick example to get you started:\n\n```js\nimport acl, { a, an, check } from '@ahmsalah/acl-js';\n\n// create different roles\nacl.createRole('admin');\nacl.createRole('user');\n\n// set permissions\nan('admin').can('post').to('/users');\na('user').can('get').from('/articles');\n\n// check permissions\nconsole.log(check.if('admin').can('post').to('/users')); // true\nconsole.log(check.if('user').can('post').to('/users')); // false\n```\n\n### Create a new role\n\n```js\nimport { a, an } from '@ahmsalah/acl-js';\n\nan('admin').can('post').to('/users');\na('user').can('get').from('/articles');\n```\n\n### Set permission\n\n`a` or `an` accepts a role, that was previously defined by `createRole`.\n\n`can` accepts one of the following http verbs: (get, post, delete, patch, put).\n\n`from` or `to` accepts an endpoint string.\n\nPlease note that `a` is just an alias of `an` while `to` is an alias of `from`; so using either one of them doesn't affect the logic in any way.\n\n```js\na('user').can('get').from('/articles');\na('user').can('post').to('/articles');\n```\n\nYou can optionally chain an additional method `when`, to set a permission with a specific condition.\n\n```js\n// in the example bellow, a user can add an article when it's his data.\na('user')\n  .can('post')\n  .to('/users/:userId/articles')\n  .when((params, user) => user.id === params.userId);\n\n// another example: a user can add a comment to a specific article\na('user')\n  .can('post')\n  .to('/articles/:articleId/articles')\n  .when((params, article) => article.id === params.articleId);\n```\n\n### Query permissions\n\nYou can check permissions using `check.if(anyRole)`\n\n```js\ncheck.if('admin').can('post').to('/users'); // returns either true or false;\n```\n\nquery permissions that has a specific condition:\n\n```js\na('user')\n  .can('post')\n  .to('/users/:userId/articles')\n  .when((params, user) => user.id === params.userId);\n\n// then to query this permission\ncheck.if('user').can('post').to('/users/10/articles').when({ id: 10 }); // true\n\ncheck.if('user').can('post').to('/users/10/articles').when({ id: 24 }); // false\n```\n","readmeFilename":"README.md"}