{"_id":"@8baselabs/rbac","_rev":"3-8b28110a0d3fc59c7a8fe93f5de65eee","name":"@8baselabs/rbac","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@8baselabs/rbac","version":"0.0.1","description":"Role-based access control (RBAC) refers to the idea of assigning permissions to users based on their role within an organization. It offers a simple, manageable approach to access management that is less prone to error than assigning permissions to users ","main":"lib/index.js","types":"./lib/index.d.ts","scripts":{"test":"jest --collect-coverage","build":"tsc","dev":"tsc --watch","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","lint":"eslint --fix"},"repository":{"type":"git","url":"git+https://github.com/8base-services/rbac.git"},"author":{"name":"8baselabs"},"license":"ISC","bugs":{"url":"https://github.com/8base-services/rbac/issues"},"homepage":"https://github.com/8base-services/rbacd#readme","husky":{"hooks":{"pre-commit":"npx lint-staged","pre-push":"npm test"}},"lint-staged":{"*.{js,ts}":["prettier --write","eslint --fix"]},"devDependencies":{"@babel/core":"^7.11.6","@babel/preset-env":"^7.11.5","@babel/preset-typescript":"^7.10.4","@types/jest":"^26.0.14","@types/node":"^14.10.1","@typescript-eslint/eslint-plugin":"^4.1.0","@typescript-eslint/parser":"^4.1.0","babel-jest":"^26.3.0","eslint":"^7.9.0","eslint-config-prettier":"^6.11.0","eslint-plugin-jest":"^24.0.1","eslint-plugin-jsdoc":"^30.4.2","husky":"^4.3.0","jest":"^26.4.2","lint-staged":"^10.3.0","prettier":"^2.1.1","ts-jest":"^26.3.0","typescript":"^4.0.2"},"keywords":["8baselabs"],"gitHead":"1980052505dcdfcb3b8c06ee71588b2fe3a871eb","_id":"@8baselabs/rbac@0.0.1","_nodeVersion":"14.18.3","_npmVersion":"8.5.0","dist":{"integrity":"sha512-WLI0xuOn8iLH6cdm58Q5/KwQsh0C4iXMmR2WltWpB1PmC8uEHDuRNsqXcEIZ1p3FvdMJ2xSEt+6XcdZq4D46Ug==","shasum":"6b66d470624b428ad42dd02db25e1d5c7700aa89","tarball":"https://registry.npmjs.org/@8baselabs/rbac/-/rbac-0.0.1.tgz","fileCount":20,"unpackedSize":20302,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHnn951XgKjLiGFyvasZ3CKanhe2fqUieGf99MZKkTAOAiBz1/fM+T+4AZewb2q9ZTVoEJMlgwtKGqa5z+w9ZOGqUQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiRaHOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqvCA/6AylLpGiM3kV4fDllhY5dIbiQvpbUuqavcXxcLq/Hm1S9iZ1u\r\npLGfKPiCynOdRDuHNcGmyrGPthep6P8VfBw+HKCKoCALOCSQWrjQGqntEq79\r\nILrJx87SYEMBcJjokh9oSPoL8giXAjR1oUQyV0JllHzh8bLElG2CzNJ//0Bt\r\nbjgnhjStdaNHASgj2OWLwU7XvrbY8xl6TP9sGBOiO7VahrmS5uU0kzCB3vPE\r\nHFk34hRGpV2KzY83sa4kHDFUMHS6c5HeS1O4VIjWmDUA7feFhiGFbwIEDNKF\r\nEpWjw+JXysjKhyIQkJVC7kW6LEOGIGMJ9ywdl9wJ0oJ89LlzMyVl1Ygd8Jxt\r\n36C3x0Dz1wTC4x9zL9m4QhJvH4T/wK56CMxl2nEgM+RYhgHC4W+iq4+OMchK\r\nsDbMW87Uf23vDyCEKxeLu3RequXpRwrBhGZEaJExhyMJns+1c0gWgN0F0FNo\r\ny/uIYT2EOp3YYggr6Ec9ZOzaBzHeVaCp9kKhLg+2mIyQ1kxYg7AZbGnoZiVo\r\n7+mO1+x4JvHIykODhVYfo/F9V5Uoxt+8x3OyqSTlN8+fi9/OaNEHDXd9JkG+\r\nzIbBWZoBEWlvohrSULgogHtCp1tc0ZXVJ62KkBuhty5Fz9beatEu8jEtM0tT\r\npqC5lxr1JAT79Oo1YECXbRGMqXQGSHJuFB4=\r\n=fkIb\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"8baselabsadmin","email":"8baselabsadmin@8baselabs.com"},"directories":{},"maintainers":[{"name":"8baselabsadmin","email":"8baselabsadmin@8baselabs.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rbac_0.0.1_1648730573981_0.17292673672428172"},"_hasShrinkwrap":false},"0.0.2":{"name":"@8baselabs/rbac","version":"0.0.2","description":"Role-based access control (RBAC) refers to the idea of assigning permissions to users based on their role within an organization. It offers a simple, manageable approach to access management that is less prone to error than assigning permissions to users ","main":"lib/index.js","types":"./lib/index.d.ts","scripts":{"test":"jest --collect-coverage","build":"tsc","dev":"tsc --watch","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","lint":"eslint --fix"},"repository":{"type":"git","url":"git+https://github.com/8base-services/rbac.git"},"author":{"name":"8baselabs"},"license":"ISC","bugs":{"url":"https://github.com/8base-services/rbac/issues"},"homepage":"https://github.com/8base-services/rbacd#readme","husky":{"hooks":{"pre-commit":"npx lint-staged","pre-push":"npm test"}},"lint-staged":{"*.{js,ts}":["prettier --write","eslint --fix"]},"devDependencies":{"@babel/core":"^7.11.6","@babel/preset-env":"^7.11.5","@babel/preset-typescript":"^7.10.4","@types/jest":"^26.0.14","@types/node":"^14.10.1","@typescript-eslint/eslint-plugin":"^4.1.0","@typescript-eslint/parser":"^4.1.0","babel-jest":"^26.3.0","eslint":"^7.9.0","eslint-config-prettier":"^6.11.0","eslint-plugin-jest":"^24.0.1","eslint-plugin-jsdoc":"^30.4.2","husky":"^4.3.0","jest":"^26.4.2","lint-staged":"^10.3.0","prettier":"^2.1.1","ts-jest":"^26.3.0","typescript":"^4.0.2"},"keywords":["8baselabs"],"gitHead":"56d69161b24f1f532ed1d93f5e91800ce9d0f756","_id":"@8baselabs/rbac@0.0.2","_nodeVersion":"14.18.3","_npmVersion":"8.5.0","dist":{"integrity":"sha512-Sml5BqN6ULma3emxa0fWuhA6cqfhduZubznoRPMUH8utPPbNviP7B4IrJOUoK3mgYPv7Ojw2vz2Av/Oaa8OYqw==","shasum":"38ccb7082957472daa529811bd7c0a81c4d6a693","tarball":"https://registry.npmjs.org/@8baselabs/rbac/-/rbac-0.0.2.tgz","fileCount":26,"unpackedSize":27438,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClgVfY5BvPN2Mt5BjpJh/Tmxs51N8q/B0gdY+mITdO6AIgWnTCKhoSRF3L4sZpSovbHma1PVPIaq1AToC49Hq10aI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiRgtZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrTZg//dkLeAjeUO7uwq9xjx11bP1YlKEB3NhhznoRJ0WCjYZ4QOIUF\r\nk3jkeSsFFLZS8AeUZdKrTpe93SAL5vfGpeZUCP2XA8OI9PbKD2AYap4JQN1K\r\nmb1DLAXMTxTDdt/K0naL86hdzI4LEO+wiHMEHu94kWOgfSaZVH6MAhubrzjL\r\nJ4gmBBPFYsHxiNI63ml4LVcsFLO3HOybfoy3j18arO/OGM3wTEqdAMkxMCXA\r\ndSggyNvI01pLoZTAZ/ABtV8JWxJQNb4y4FjyvBuFLtvkDshE5zaOCnnLGUiP\r\nFQ8eD/S7uJBRfURwMFDfB6Df1sN9uIyg8usY/h80VZ9T8/ojXEpzeRIZX34+\r\nz7Yhv0XxzfRaNGRzKLFOhr8EamGGhCXebI6pQ3YMS9tdpCaW89VS6CBWg2tb\r\n81UlL2TvP2uUY6BX/F4/cBIeneKXtfKRKP4R8qfJ6NgmXNvNwqKY+xQvjXvX\r\njhcO2aWJgom+LE3Ppvr3CoiBdQd+1whHiko7PWbC1ddSrnrVK20glOouF7FL\r\nZIHTnjz7EpNq8jXl4X2baBKq8Gad7ULMWqP6KrLRSCyESCL6S2mVD7yaBj6m\r\n6LADgsybF7nDhCQSxrLa0rFnuAs9VfNFKUp7DWIcYBqk0dqX3MD+/CSTcJO1\r\n0HbVTJCx09UP4yG4RctBDlYp9Lzo3CVnqxo=\r\n=LmR0\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"8baselabsadmin","email":"8baselabsadmin@8baselabs.com"},"directories":{},"maintainers":[{"name":"8baselabsadmin","email":"8baselabsadmin@8baselabs.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/rbac_0.0.2_1648757593610_0.8197698870731562"},"_hasShrinkwrap":false}},"time":{"created":"2022-03-31T12:42:53.918Z","0.0.1":"2022-03-31T12:42:54.138Z","modified":"2023-02-06T11:21:38.286Z","0.0.2":"2022-03-31T20:13:13.759Z"},"maintainers":[{"email":"marcelo.garciaprieto@8baselabs.com","name":"magarciaprieto"},{"email":"ariel.deagustini@8baselabs.com","name":"ariel.deagustini.8baselabs"},{"email":"8baselabsadmin@8baselabs.com","name":"8baselabsadmin"}],"description":"Role-based access control (RBAC) refers to the idea of assigning permissions to users based on their role within an organization. It offers a simple, manageable approach to access management that is less prone to error than assigning permissions to users ","homepage":"https://github.com/8base-services/rbacd#readme","keywords":["8baselabs"],"repository":{"type":"git","url":"git+https://github.com/8base-services/rbac.git"},"author":{"name":"8baselabs"},"bugs":{"url":"https://github.com/8base-services/rbac/issues"},"license":"ISC","readme":"# Role-Based Access Control\n\nRole-based access control (RBAC) refers to the idea of assigning permissions to users based on their role within an organization. It offers a simple, manageable approach to access management that is less prone to error than assigning permissions to users individually.\n\n<br/>\n\n## Goals:\n\n- create systematic, repeatable assignment of permissions\n\n- easily audit user privileges and correct identified issues\n\n- quickly add and change roles, as well as implement them across APIs\n\n- cut down on the potential for error when assigning user permissions\n\n- integrate third-party users by giving them pre-defined roles\n\n- more effectively comply with regulatory and statutory requirements for confidentiality and privacy\n\n- RBAC Model\n\n## Installation\n\n1. Run on your terminal the following command:\n\n```sh\n$ npm i @8baselabs/rbac\n```\n\n[`Example`](#Examples)\n\n### Basic use (Strictly types by defualt)\n\n```typescript\n// It is strictly typed so it need enums declared before initialization\nenum Roles {\n  ADMIN = 'ADMIN',\n  MANAGER = 'MANAGER',\n}\n\nenum Permissions {\n  DASHBOARD = 'DASHBOARD',\n}\n\n// It needs the Roles and Permissions passed as generics, and a default role.\nconst RBACproject = new RBAC<Roles, Permissions>(Roles.ADMIN);\n\n// defined the rules\nRBACproject.createRule(\n  Roles.ADMIN,\n  Permissions.DASHBOARD,\n  true,\n  'Access granted',\n);\nRBACproject.createRule(\n  Roles.MANAGER,\n  Permissions.DASHBOARD,\n  false,\n  'Access denied',\n);\n\nRBACproject.check(Roles.ADMIN, Permissions.DASHBOARD); // [true, 'Access granted']\n```\n\n### Declaring dynamic rules\n\n```typescript\n// It is strictly typed so it need enums declared before initialization\nenum Roles {\n  ADMIN = 'ADMIN',\n  MANAGER = 'MANAGER',\n}\n\nenum Permissions {\n  DASHBOARD = 'DASHBOARD',\n}\n\n// It accept a type for the dinamic data of the permission\nconst RBACdynamic = new RBAC<\n  Roles,\n  Permissions,\n  { DASHBOARD: { shouldEdit: boolean } }\n>(Roles.ADMIN);\n\n// Here data will be types as `{ shouldEdit: boolean }`\nRBACdynamic.createRule(Roles.ADMIN, Permissions.DASHBOARD, (data) => {\n  const result = data.shouldEdit;\n\n  const message = result ? 'Access granted' : 'Access denied';\n  return [result, message];\n});\n\nconst testData = { shouldEdit: true }; // fake data\nRBACdynamic.check(Roles.ADMIN, Permissions.DASHBOARD, testData);\n```\n\n### Set default role\n\n```typescript\nenum Roles {\n  ADMIN = 'ADMIN',\n  MANAGER = 'MANAGER',\n}\n\nenum Permissions {\n  DASHBOARD = 'DASHBOARD',\n}\n\nconst defaultRole = new RBAC<Roles, Permissions>(Roles.MANGER);\n\ndefaultRole.createRule(\n  Roles.ADMIN,\n  Permissions.DASHBOARD,\n  false,\n  'Access granted',\n);\n\n// This method allows to set a defualt role, after initialization\ndefaultRole.setDefaultRole(Roles.ADMIN);\n\ndefaultRole.check(null, Permissions.DASHBOARD); // [false, 'Access granted']\n```\n\n### Integration with React\n\n```tsx\nenum Roles {\n  ADMIN = 'ADMIN',\n  MANAGER = 'MANAGER',\n}\n\nenum Permissions {\n  AGENT_ADMIN_USER_DETAILS = 'AGENT_ADMIN_USER_DETAILS',\n}\n\nconst RBAC = new RBAC<Roles, Permissions>(Roles.MANGER);\n\nRBAC.createRule(\n  Roles.ADMIN,\n  Permissions.AGENT_ADMIN_USER_DETAILS,\n  false,\n  'Access granted',\n);\n\nconst RoleAuthorization = ({ render, error, permission }) => {\n  const [canRender, message] = RBAC.check('admin', permission, data);\n  if (canRender) {\n    return render(message);\n  }\n  return error ? error(message) : null;\n};\n\nconst MyComponent = () => (\n  <RoleAuthorization\n    permission={'AGENT_ADMIN_USER_DETAILS'}\n    render={() => <UserDetialsView />}\n    error={() => <div>You dont have permission</div>}\n  />\n);\n```\n\n### Integration with Node.js\n\n```ts\nconst api = require('api-request');\n\nenum Roles {\n  ADMIN = 'ADMIN',\n  MANAGER = 'MANAGER',\n}\n\nenum Permissions {\n  CAN_READ_USERS = 'CAN_READ_USERS',\n}\n\nconst RBAC = new RBAC<Roles, Permissions>(Roles.MANGER);\n\nRBAC.createRule(\n  Roles.ADMIN,\n  Permissions.CAN_READ_USERS,\n  true,\n  'Access granted',\n);\n\nif (RBAC.check(Roles.ADMIN, Permissions.CAN_READ_USERS)) {\n  api.getUser().then((users) => {\n    //Do some stuff with uses.\n  });\n}\n```\n","readmeFilename":"README.md"}