{"_id":"mongoose-rbac","_rev":"29-14e7361b7ad8bff09bee24337599106d","name":"mongoose-rbac","description":"Role-based access control for mongoose apps.","dist-tags":{"latest":"0.1.3"},"versions":{"0.0.1":{"name":"mongoose-rbac","version":"0.0.1","description":"Role-based access control for mongoose models.","main":"lib/index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/bryandragon/mongoose-rbac.git"},"keywords":["mongoose","security","authorization","rbac","role","permission"],"author":{"name":"Bryan Dragon","email":"bryandragon@gmail.com","url":"http://www.bryandragon.com"},"license":"MIT","devDependencies":{"mongodb":"~1.2.13","mocha":"~1.8.1","expect.js":"~0.2.0"},"dependencies":{"mongoose":"~3.6.0rc0","async":"~0.2.6"},"_id":"mongoose-rbac@0.0.1","dist":{"shasum":"9e350be0c6f9722b45e2d0c124eb3bf51754bed1","tarball":"https://registry.npmjs.org/mongoose-rbac/-/mongoose-rbac-0.0.1.tgz","integrity":"sha512-1DleZvc4Zb6brHpWZcQhEtSpP2nF5lT4uGxESOXFJqvdW0xduNDhLAhcPpCQ7qxSmknb3u8g5eZSP5qKhhIikg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGg6wHWZXVCr2AKvkO9RA1BPQw9AkNAHC/x0RukFuICWAiAzPBdSHdbIRDBgOXV4yMPr2Yr5U8Ipv+JfQfg5A6qbvA=="}]},"_npmVersion":"1.1.69","_npmUser":{"name":"bryandragon","email":"bryan@codewordcreative.com"},"maintainers":[{"name":"bryandragon","email":"bryan@codewordcreative.com"}],"directories":{}},"0.0.2":{"name":"mongoose-rbac","version":"0.0.2","description":"Role-based access control for mongoose apps.","main":"lib/index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/bryandragon/mongoose-rbac.git"},"keywords":["mongoose","security","authorization","rbac","role","permission"],"author":{"name":"Bryan Dragon","email":"bryandragon@gmail.com","url":"http://www.bryandragon.com"},"license":"MIT","devDependencies":{"mocha":"~1.8.1","expect.js":"~0.2.0"},"dependencies":{"mongoose":"~3.6.0rc0","async":"~0.2.6"},"_id":"mongoose-rbac@0.0.2","dist":{"shasum":"3cb8d7d0980aeee91ae234b77402a456451ee9d5","tarball":"https://registry.npmjs.org/mongoose-rbac/-/mongoose-rbac-0.0.2.tgz","integrity":"sha512-xAgoUUS5s8J3o07A4Clh6/hjVUnAqLlV6WzvvIF0VOcmUniRV3x1GIkylFu6j32qQxBHOOTnGCoGxn6cnA3mOg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFVKwD3Pja8LYC8SUSwmQLcsNgcCoVfqsQYugZVB31/6AiEA16sizNPNn5yPP5NV2P2289ZmsWjvlUkxDUc7HPb+g2I="}]},"_npmVersion":"1.1.69","_npmUser":{"name":"bryandragon","email":"bryan@codewordcreative.com"},"maintainers":[{"name":"bryandragon","email":"bryan@codewordcreative.com"}],"directories":{}},"0.0.3":{"name":"mongoose-rbac","version":"0.0.3","description":"Role-based access control for mongoose apps.","main":"lib/index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/bryandragon/mongoose-rbac.git"},"keywords":["mongoose","security","authorization","rbac","role","permission"],"author":{"name":"Bryan Dragon","email":"bryandragon@gmail.com","url":"http://www.bryandragon.com"},"license":"MIT","devDependencies":{"mocha":"~1.8.1","expect.js":"~0.2.0"},"dependencies":{"mongoose":"~3.6.0rc0","async":"~0.2.6"},"_id":"mongoose-rbac@0.0.3","dist":{"shasum":"fd3e724eaad2248acbe04b9ec00b76a500fbbb41","tarball":"https://registry.npmjs.org/mongoose-rbac/-/mongoose-rbac-0.0.3.tgz","integrity":"sha512-9WA6VDqdoPXuWADMYvvR/3QSIERN4TdSetBA2ZlZRNiDM/ZSgUEg+oiNTyUKfj+OhF9/oLsrxACr4dEJ5Nn3qQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQ/xVWmM4e44nnW4TYOoPWZOkbO23wyzsN151cZcbeWAiEAmbiXgbm8R8wWKUdXbc0nAkDWjrIiB0qAD0pa4z5Zfvw="}]},"_npmVersion":"1.1.69","_npmUser":{"name":"bryandragon","email":"bryan@codewordcreative.com"},"maintainers":[{"name":"bryandragon","email":"bryan@codewordcreative.com"}],"directories":{}},"0.1.0":{"name":"mongoose-rbac","version":"0.1.0","description":"Role-based access control for mongoose apps.","main":"lib/index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/bryandragon/mongoose-rbac.git"},"keywords":["mongoose","security","authorization","rbac","role","permission"],"author":{"name":"Bryan Dragon","email":"bryandragon@gmail.com","url":"http://www.bryandragon.com"},"license":"MIT","devDependencies":{"mocha":"~1.8.1","chai":"~1.6.1"},"dependencies":{"mongoose":"~3.6.11","async":"~0.2.6"},"_id":"mongoose-rbac@0.1.0","dist":{"shasum":"6be76a407f94813c8567bb177b143baabf8a90af","tarball":"https://registry.npmjs.org/mongoose-rbac/-/mongoose-rbac-0.1.0.tgz","integrity":"sha512-oKuqI5tm9ojnrtNZSl97HHzREL2zvmldlluHaWT7rOe7WylWwZlwook1XMEQ9scfBp/9KTiBViS7jeGaLOX3WQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEllXSkJQIkDkYfkpPJ/okMHlSA9TF0jz4qw/j/ToaSgAiEAn+1dB2wMAB7QZzI3bXd8Sgs0+hfLL5P5Rx8GYORfXDA="}]},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"bryandragon","email":"bryandragon@gmail.com"},"maintainers":[{"name":"bryandragon","email":"bryan@codewordcreative.com"}],"directories":{}},"0.1.1":{"name":"mongoose-rbac","version":"0.1.1","description":"Role-based access control for mongoose apps.","main":"lib/index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/bryandragon/mongoose-rbac.git"},"keywords":["mongoose","security","authorization","rbac","role","permission"],"author":{"name":"Bryan Dragon","email":"bryandragon@gmail.com","url":"http://www.bryandragon.com"},"license":"MIT","devDependencies":{"mocha":"~1.8.1","chai":"~1.6.1"},"dependencies":{"mongoose":"~3.8.x","async":"~0.2.6"},"bugs":{"url":"https://github.com/bryandragon/mongoose-rbac/issues"},"homepage":"https://github.com/bryandragon/mongoose-rbac","_id":"mongoose-rbac@0.1.1","dist":{"shasum":"78ca670452565ca65c498586b30473c4c539b69b","tarball":"https://registry.npmjs.org/mongoose-rbac/-/mongoose-rbac-0.1.1.tgz","integrity":"sha512-jv2AWAQWBI+aLSJX3rsir8JVCDcBPNY7awgEL9YGI9CZ4G8IlhQW7ByNKKFwSuIvYNamXv8dSgaI63nyNaKSxA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcdrBfyApMF9gHQ+EbkkLK+vq7+sxrpTCKC4+V0PDGNwIgJVL7RR0cxebPt93uTcu76bCa8QFxmjL5nWC4kmiFNwQ="}]},"_from":".","_npmVersion":"1.3.24","_npmUser":{"name":"bryandragon","email":"bryandragon@gmail.com"},"maintainers":[{"name":"bryandragon","email":"bryan@codewordcreative.com"}],"directories":{}},"0.1.2":{"name":"mongoose-rbac","version":"0.1.2","description":"Role-based access control for mongoose apps.","main":"lib/index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/bryandragon/mongoose-rbac.git"},"keywords":["mongoose","security","authorization","rbac","role","permission"],"author":{"name":"Bryan Dragon","email":"bryandragon@gmail.com","url":"http://www.bryandragon.com"},"license":"MIT","devDependencies":{"mocha":"~1.8.1","chai":"~1.6.1"},"dependencies":{"mongoose":"~3.8.x","async":"~0.2.6"},"bugs":{"url":"https://github.com/bryandragon/mongoose-rbac/issues"},"homepage":"https://github.com/bryandragon/mongoose-rbac","_id":"mongoose-rbac@0.1.2","dist":{"shasum":"d6fa295f652dc487e97be18ef1a990cf420d784d","tarball":"https://registry.npmjs.org/mongoose-rbac/-/mongoose-rbac-0.1.2.tgz","integrity":"sha512-jifR942wh4D36FzenI12Z4QDTWcUXI96ympaCwbv+QYiBANp/qrboUdL8Xhv8d+ET0R4xfpik2D7sRpTh2Earw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDF/lsCOHYh591bpBmG/62BDEHndiwGkuh5vMHsx1dT2wIgCqdcH5XWQZpxM6aeIZPeVn29ijDlZKnr5JmtwJp+SFs="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"bryandragon","email":"bryandragon@gmail.com"},"maintainers":[{"name":"bryandragon","email":"bryan@codewordcreative.com"}],"directories":{}},"0.1.3":{"name":"mongoose-rbac","description":"Role-based access control for mongoose apps.","version":"0.1.3","author":{"name":"Bryan Dragon","email":"bryandragon@gmail.com"},"main":"lib/index.js","scripts":{"test":"make test"},"repository":{"type":"git","url":"git://github.com/bryandragon/mongoose-rbac.git"},"keywords":["mongoose","security","authorization","rbac","role","permission"],"dependencies":{"mongoose":"~3.8.x","async":"~0.2.6"},"devDependencies":{"mocha":"~1.8.1","chai":"~1.6.1","jshint":"~2.4.4"},"license":"MIT","bugs":{"url":"https://github.com/bryandragon/mongoose-rbac/issues"},"homepage":"https://github.com/bryandragon/mongoose-rbac","_id":"mongoose-rbac@0.1.3","dist":{"shasum":"0aba9d1864da07f62e62bebbdadcff8aaa9f3bfe","tarball":"https://registry.npmjs.org/mongoose-rbac/-/mongoose-rbac-0.1.3.tgz","integrity":"sha512-F2sh1tWOOlBnrRpdbaQvx7vInA/MjeM9LxieXZZHhm4vzW7jIHBA75Q1fuQH0K6y1rs4wWRYk8HXxY38LcNl0w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC75b9mS3PZGzyetYFlLdrsk5d4WkAJsfBHYn+um52PDwIhAKR8pARDFGJahFKXEirn6HuF6VQceftgZVgAFnzTktMo"}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"bryandragon","email":"bryandragon@gmail.com"},"maintainers":[{"name":"bryandragon","email":"bryan@codewordcreative.com"}],"directories":{}}},"readme":"# mongoose-rbac\n\nRole-based access control for [mongoose](http://mongoosejs.com) apps.\n\n[![Build Status](https://secure.travis-ci.org/bryandragon/mongoose-rbac.png)](http://travis-ci.org/bryandragon/mongoose-rbac)\n\n## Requirements\n\n* [mongoose](https://github.com/learnboost/mongoose/) 3.8.x\n\n## Installation\n\n```\nnpm install mongoose-rbac --save\n```\n\n## Usage\n\nmongoose-rbac gives you the building blocks to lock down your app with role-based access control and gets out of your way.\n\nGenerally, you will want to do the following:\n\n1. Create a `Permission` for each action you desire to control. A `Permission` consists of a `subject` and an `action`.\n2. Create a `Role` for each role you wish to assign. A `Role` only requires a unique `name`.\n3. Assign the desired set of permissions to each role.\n4. Use the mongoose-rbac plugin in your user schema.\n\n### Example\n\nFollowing is a typical example. Let's imagine we are managing a blog with users, preferences, posts and comments. First, we will define our permissions and roles:\n\n```javascript\n// permissions.js\n\nvar rbac = require('mongoose-rbac')\n  , Permission = rbac.Permission\n  , Role = rbac.Role\n  , permissions;\n\npermissions = [\n    { subject: 'Post', action: 'create' }\n  , { subject: 'Post', action: 'read' }\n  , { subject: 'Post', action: 'update' }\n  , { subject: 'Post', action: 'delete' }\n  , { subject: 'Comment', action: 'create' }\n  , { subject: 'Comment', action: 'read' }\n  , { subject: 'Comment', action: 'update' }\n  , { subject: 'Comment', action: 'delete' }\n  , { subject: 'Preference', action: 'create' }\n  , { subject: 'Preference', action: 'read' }\n  , { subject: 'Preference', action: 'update' }\n  , { subject: 'Preference', action: 'delete' }\n];\n\nPermission.create(permissions, function (err) {\n  var perms, admin, developer, readonly;\n\n  perms = Array.prototype.slice.call(arguments, 1);\n\n  admin = new Role({ name: 'admin' });\n  admin.permissions = perms;\n  admin.save(function (err, admin) {\n    developer = new Role({ name: 'developer' });\n    developer.permissions = perms.slice(0, 7);\n    developer.save(function (err, developer) {\n      readonly = new Role({ name: 'readonly' });\n      readonly.permissions = [perms[1], perms[5], perms[9]];\n      readonly.save(function (err, readonly) {\n        // ...\n      });\n    });\n  });\n});\n```\n\nAlternatively we can use `init` to easily bootstrap roles and permissions:\n\n```javascript\n// permissions.js\n\nvar rbac = require('mongoose-rbac');\n\nrbac.init({\n  admin: [\n    ['create', 'Post'],\n    ['read', 'Post'],\n    ['update', 'Post'],\n    ['delete', 'Post']\n  ],\n  readonly: [\n    // we can also specify permissions as an object\n    { action: 'read', subject: 'Post' }\n  ]\n}, function (err, admin, readonly) {\n  console.log(admin);\n  /*\n    { __v: 1,\n      name: 'admin',\n      _id: 513c14dbc90000d10100004e,\n      permissions: [ 513c14dbc90000d101000044,\n        513c14dbc90000d101000045,\n        513c14dbc90000d101000046,\n        513c14dbc90000d101000047 ] }\n  */\n  console.log(readonly);\n  /*\n    { __v: 1,\n      name: 'readonly',\n      _id: 513c14dbc90000d10100004f,\n      permissions: [ 513c14dbc90000d101000045 ] }\n  */\n});\n```\n\nNext, we will enhance our user model with the mongoose-rbac plugin:\n\n```javascript\n// user.js\n\nvar mongoose = require('mongoose')\n  , rbac = require('mongoose-rbac')\n  , UserSchema\n  , User;\n\nUserSchema = mongoose.Schema({\n  username: String,\n  passwordHash: String\n});\n\nUserSchema.plugin(rbac.plugin);\n\nmodule.exports = mongoose.model('User', UserSchema);\n```\n\nFinally, we can assign roles to our users and control their access to system resources:\n\n```javascript\nvar User = require('user')\n  , user;\n\nuser = new User({ username: 'hercules' });\nuser.save();\n\nuser.addRole('admin', function (err) {});\n\nuser.hasRole('admin', function (err, isAdmin) {\n  console.log(isAdmin); // true\n});\n\nuser.can('create', 'Post', function (err, can) {\n  if (can) {\n    // ok\n  }\n  else {\n    // insufficient privileges\n  }\n});\n\nuser.canAny([['read', 'Post'], ['create', 'Post']], function (err, canReadOrCreate) {\n  if (canReadOrCreate) {\n    // ok\n  }\n  else {\n    // insufficient privileges\n  }\n});\n\nuser.removeRole('admin', function (err) {});\n```\n\n## Model Plugin API\n\n### `hasRole(role, callback)`\n\nCheck if the model has the given role.\n\n* `role` String or Role\n* `callback(err, bool)` Function\n\n### `addRole(role, callback)`\n\nAdd the given role to the model.\n\n* `role` String or Role\n* `callback(err)` Function\n\n### `removeRole(role, callback)`\n\nRemove the given role from the model.\n\n* `role` String or Role\n* `callback(err)` Function\n\n### `can(action, subject, callback)`\n\nCheck if the model has the given permisison.\n\n* `action` String\n* `subject` String\n* `callback(err, bool)` Function\n\n### `canAny(actionsAndSubjects, callback)`\n\nCheck if the model has _any_ of the given permissions.\n\n* `actionsAndSubjects` Array (of `[String, String]`)\n* `callback(err, bool)` Function\n\n### `canAll(actionsAndSubjects, callback)`\n\nCheck if the model has _all_ of the given permissions.\n\n* `actionsAndSubjects` Array (of [String, String])\n* `callback(err, bool)` Function\n\n## Running Tests\n\nTo run the tests, clone the repository and install the dev dependencies:\n\n```bash\ngit clone git://github.com/bryandragon/mongoose-rbac.git\ncd mongoose-rbac && npm install\nmake test\n```\n\n## License\n\nMIT\n","maintainers":[{"email":"uahengo@me.com","name":"seriousblack"},{"email":"me@vincentbriglia.com","name":"vincentbriglia"},{"email":"bryandragon@gmail.com","name":"bryandragon"}],"time":{"modified":"2022-06-20T07:39:34.285Z","created":"2013-03-10T05:25:36.737Z","0.0.1":"2013-03-10T05:25:37.255Z","0.0.2":"2013-03-10T05:51:42.280Z","0.0.3":"2013-03-10T05:53:36.319Z","0.1.0":"2013-06-17T20:21:28.716Z","0.1.1":"2014-02-11T01:57:52.334Z","0.1.2":"2014-03-05T21:24:45.306Z","0.1.3":"2014-03-20T16:33:25.138Z"},"author":{"name":"Bryan Dragon","email":"bryandragon@gmail.com"},"repository":{"type":"git","url":"git://github.com/bryandragon/mongoose-rbac.git"},"readmeFilename":"README.md","homepage":"https://github.com/bryandragon/mongoose-rbac","keywords":["mongoose","security","authorization","rbac","role","permission"],"bugs":{"url":"https://github.com/bryandragon/mongoose-rbac/issues"},"license":"MIT","users":{"davidhalldor":true,"wlepinski":true,"luislobo":true,"freebird":true,"temasm":true,"edwardxyt":true}}