{"_id":"acl","_rev":"126-e6b20aa316063dcb5b8cfc7aa2e0948d","name":"acl","description":"An Access Control List module, based on Redis with Express middleware support","dist-tags":{"latest":"0.4.11"},"versions":{"0.0.1":{"name":"acl","version":"0.0.1","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{},"devDependencies":{},"_id":"acl@0.0.1","_engineSupported":true,"_npmVersion":"1.0.6","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"0416941caf3160044e70f869a36379640a53a9ee","tarball":"https://registry.npmjs.org/acl/-/acl-0.0.1.tgz","integrity":"sha512-0ueGpE0g/LwVT5lS2bcOzc/HxTVfaSkM8Ttz+Gf+Xpobcv4HGBe9E0rQtdjujjK6EC5M68hKszJF4sVKRwxKvg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC73pVjM3rAGidpD0rEj2x3cLUXsm9USett2Nih9I78CgIgMw+eodWyqUZciFa+T3RTwmKyDNtEL9FrBIlxcztRZ6M="}]},"scripts":{},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"directories":{}},"0.0.2":{"name":"acl","version":"0.0.2","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{},"devDependencies":{},"_id":"acl@0.0.2","_engineSupported":true,"_npmVersion":"1.0.6","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"1d31b1f61cb0d6bd770319d1598ad4ad16d99bea","tarball":"https://registry.npmjs.org/acl/-/acl-0.0.2.tgz","integrity":"sha512-fvWTVOBPnMT6cOUEEJ8rZqMMvaP1UIC7EYe4HCOnBjJT/Q5/yNGHtqZyAhSpOPhWjl37N+gdr0J0C0UNPwEoaQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDw7RzrLcgBRSP3imrNhHF6JCufGETsDT2JtFOTQbpnNAiBy3geaK0luYGrvQiuURO8t0+hF/1+SFjtz4nwTDaJ80Q=="}]},"scripts":{},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"directories":{}},"0.0.3":{"name":"acl","version":"0.0.3","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{},"devDependencies":{},"_id":"acl@0.0.3","_engineSupported":true,"_npmVersion":"1.0.6","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"16dd06134c4d34a7555f79cf3081f5ea3167cd85","tarball":"https://registry.npmjs.org/acl/-/acl-0.0.3.tgz","integrity":"sha512-R9WznMU4O66e9islSZsiz7ABYk1j6ZLeLm1WK6xFtN9n+MnDDto9ztCSqthwdcU1SWf3goD0I6hFMuulohSsCA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGOT+y4yvdd5Mu6q/ao2aR9aeNVKAsgKUn2vA0vXfX8uAiAdPb6+A53jnHQN4ZS9ikC7KRsgmS8hy2FQRN3OglJqFQ=="}]},"scripts":{},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"directories":{}},"0.0.4":{"name":"acl","version":"0.0.4","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","_npmJsonOpts":{"file":"/Users/manuel/.npm/acl/0.0.4/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"acl@0.0.4","dependencies":{},"devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.27","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"4cb7662765d1bc7396469b92cf50ebbd1384a231","tarball":"https://registry.npmjs.org/acl/-/acl-0.0.4.tgz","integrity":"sha512-EhCGfwzWQSYhsgtpBC/v8HKJF+LUEsqzvOZ0rbvfTNnc7sq72F8pNWukqy1llFhQlEPjY+mouA1mTQgpdGobOg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFBoT2s+U0j10uLbUJuwN1yO1nYV3nq6oFEYoItektpZAiAVqgAQTaQA7oKOq/mpQtdJtjNRtOEllC2MiHgFj18c4g=="}]},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.1.0":{"name":"acl","version":"0.1.0","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","async":">=0.1.15","underscore":">= 1.2.2"},"_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"_id":"acl@0.1.0","devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"a6e639923dfebddfffaea0961789e30ee4037d2b","tarball":"https://registry.npmjs.org/acl/-/acl-0.1.0.tgz","integrity":"sha512-eybRc50+fxStKsm9qDyglf+zN1scYfihzm5yi+n6YaXyplq8jFsZj3XhElL7fmR5eatGqNWFgQlFwj3uvEDIig==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBuUtbXN6N7zlNAVCwMgJC9jXFD17Ss/DJUFJ28wf1WlAiEArqoBuNycLm1FA9E6kXauYUDiUHiPy790JbyKjbiH94E="}]},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.1.1":{"name":"acl","version":"0.1.1","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","async":">=0.1.15","underscore":">= 1.2.2"},"_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"_id":"acl@0.1.1","devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"3eebe7c2c06a8fa279e5564c78d4ce5f00f786fc","tarball":"https://registry.npmjs.org/acl/-/acl-0.1.1.tgz","integrity":"sha512-uztDPOStUMrvtYM7boCiYLTE8AbRCmv/hNdE4YI4aXcvu3O8tfBXaCpbMypYzK9mchRXFP1ye7Oms/vQiZzG9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDK+oQV3wufrYq0nCkie6GBWcMZ91j2mv/TgDytnnvdegIhAPNOYZCgOjHjD8EePiB+bNiaaojiQYsFcD/mdUlAUkml"}]},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.1.2":{"name":"acl","version":"0.1.2","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","async":">=0.1.15","underscore":">= 1.2.2"},"_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"_id":"acl@0.1.2","devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"b247a81a40a4dc68e0cbb77b473e57b672025a66","tarball":"https://registry.npmjs.org/acl/-/acl-0.1.2.tgz","integrity":"sha512-ftfLU8UwYWb5hr5iyfmmM0KWcOCmAvhTV4hlrboUcO39ErttDKc7kqAQRReIn3mLFuRY/1Yn5PaiN0pc1r6Bqw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIClMlofCed305FQBuena0ed63rRIl7bjber8om15Qg0vAiEA1aO+kHjkYWQcndaRw2y58y48yV2RNuRiFsG/0YjQD1s="}]},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.1.3":{"name":"acl","version":"0.1.3","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","async":">=0.1.15","underscore":">= 1.2.2"},"_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"_id":"acl@0.1.3","devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"e419614a2ec65f1246afe6d015acd6326384917e","tarball":"https://registry.npmjs.org/acl/-/acl-0.1.3.tgz","integrity":"sha512-z6ddncvLjlp37eiG2XSKZ8EVs4zSc8tnb45cg4ZBs80uJdadUiKQ4J9kHSFGgKGG0AZfewLmHeIpyGgR/u3+5A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxLi5UbLIN9ccMf4noRO+YC6DQ38tWyYzKSdtaXJ/TCwIgK0EFGX6ABM5Bytvbw9WV+fxp0siWO5k/nvgZpe0ICJ8="}]},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.1.4":{"name":"acl","version":"0.1.4","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","async":">=0.1.15","underscore":">= 1.2.2"},"_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"_id":"acl@0.1.4","devDependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-3","_nodeVersion":"v0.6.10","_defaultsLoaded":true,"dist":{"shasum":"82f09fd45263e93bec0d542cbccdc880b61df28b","tarball":"https://registry.npmjs.org/acl/-/acl-0.1.4.tgz","integrity":"sha512-3cP2iO5veCPQdTpD2yInf4jCJJh39AtRuR0T3Xg8fUoS3IyxU04/2irdyhqLn8lm7W66PDaiHPQj5YocS6nwng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHS1szJ6guMUox0e+szaStzyQMbDR2c233HCk4uao4twIhANJgRwTDQ8Tn5SOfQBTpQpHHDT9DbCcDp+ZJ0ZtlKYyT"}]},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.2.0":{"name":"acl","version":"0.2.0","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","async":">=0.1.15","underscore":">= 1.2.2"},"devDependencies":{"vows":"0.6.x"},"scripts":{"test":"vows --spec"},"_id":"acl@0.2.0","dist":{"shasum":"b2d39d358db20b6d372a205a4343f0c9a0d12f75","tarball":"https://registry.npmjs.org/acl/-/acl-0.2.0.tgz","integrity":"sha512-kYk8oi1MKRZ5Kp6GtBkaxXvgF5FJhTzMqh8rGFvtUYpAb7rbZbgSmFD/Hzgxjqs2jeyBlm/X4MSt9XkH+HMP8A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBmAwozk9Xf4GEhksXHCGFQAZrGaBLS8jXmJAbtNU9sPAiBHfuq4IVUJ+edaI47JLU2pZYc22U7iF6MAhImopZUT9w=="}]},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.2.1":{"name":"acl","version":"0.2.1","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","async":">=0.1.15","underscore":">= 1.2.2"},"devDependencies":{"vows":"0.6.x"},"scripts":{"test":"vows --spec"},"_id":"acl@0.2.1","dist":{"shasum":"d0d217fc4bb25db5a1849c2dfce4368e73995484","tarball":"https://registry.npmjs.org/acl/-/acl-0.2.1.tgz","integrity":"sha512-RaMKkm27nvQBN9uZsmPpCy1K12Wj0/h97Latr8NUleajYW7+W0xjNt11kEhnb6ln4rLVPlVfch0lAuBJcis3ag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHHFXqjJlap0cCMiqtsTa9ilqRujd5JzHyBair4l8PZrAiAdL0XQStigz+/blqX116o6Pks4+PR6u++mOJDFV9xY5w=="}]},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.2.2":{"name":"acl","version":"0.2.2","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","async":">=0.1.15","underscore":">= 1.2.2"},"devDependencies":{"vows":"0.6.x"},"scripts":{"test":"vows --spec"},"_id":"acl@0.2.2","dist":{"shasum":"b078173afdbf64bb64c0a1b00b1ef626d761a9e4","tarball":"https://registry.npmjs.org/acl/-/acl-0.2.2.tgz","integrity":"sha512-5Kjf/PGCeMEUMt3Mehk0z4xaVkL4KBZMNfzZ4/3e3lSJecUrWbat+oMU6IfMJ0CbxL1CChk8PbZnI3Hf5lGtWQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAmM3TSgouWn/iWV+v2X2l1cb9jrG9PuVqkFao+kd+y4AiEA4Jd2SkoVk2ZsJ+K/oPgDW8atd1pZoxBHeqzpWtDixtU="}]},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.2.3":{"name":"acl","version":"0.2.3","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","async":">=0.1.15","underscore":">= 1.2.2","mongodb":"*"},"devDependencies":{"vows":"0.6.x"},"scripts":{"test":"node test/run_tests.js"},"_id":"acl@0.2.3","dist":{"shasum":"0c36ab437ee23fb578b632d7a409545a6473a73e","tarball":"https://registry.npmjs.org/acl/-/acl-0.2.3.tgz","integrity":"sha512-Zxp4s4hrPBDTKLO1LqRhSzf8IfC+7B+FWsKufo39ymTA+WdNqsq/Jqkq+S3+NCEQ6Lp2lN+a4ggZWwOImInTeA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFz+DTS4owrspTLqR7ZaPWUB1lQ1TKUqrQhvCxk7U0BzAiAgESfNj9CEBHwuapODHknIeYLf6J2nGcslseWZVkIdew=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.2.4":{"name":"acl","version":"0.2.4","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","async":">=0.1.15","underscore":">= 1.2.2","mongodb":"*"},"devDependencies":{"mocha":"~1.12","chai":"~1.7.2"},"scripts":{"test":"mocha test/runner.js --reporter spec"},"bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.2.4","dist":{"shasum":"d24892fe0978c9193503d8dad4ac6638febebbe6","tarball":"https://registry.npmjs.org/acl/-/acl-0.2.4.tgz","integrity":"sha512-/qcj8yeqJCit62K8SpmeGJaYRkgDyZSm2yP7BnTwfexq466haenD/oDWZ9R643wZyUO4JyLEXC+3UCtsVzNMog==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsLg5s3PdqiFbFN7QaSo9IQxR50inM/iKjV/v5womhHQIgWb1shK1Duwu3ot9pwVfZp0GcA9c/OGOEDL0aSfgIX7M="}]},"_from":".","_npmVersion":"1.2.24","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.2.5":{"name":"acl","version":"0.2.5","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","async":">=0.1.15","underscore":">= 1.2.2","mongodb":"*"},"devDependencies":{"mocha":"~1.12","chai":"~1.7.2"},"scripts":{"test":"mocha test/runner.js --reporter spec"},"bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.2.5","dist":{"shasum":"e79190b095961f45a88206d3f1fb3b1b1d6f1a96","tarball":"https://registry.npmjs.org/acl/-/acl-0.2.5.tgz","integrity":"sha512-x8AQCw0m3HEnFyNRZWI5PuOJx+XIgdCMDi3jfoA3sPVqd77ZHiZIR2vnGkUzdYHLgkvnXHtY7c4mqDYIfhrBRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGXUK2oqcG9SC8GMNN/KbRNP18mxB4ON40EIuFnuUJSnAiA97XDXfAvFL7jGVj6hsvb/+0z/pVb2z5CShMW4nf62Rw=="}]},"_from":".","_npmVersion":"1.2.24","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.2.6":{"name":"acl","version":"0.2.6","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","async":">=0.1.15","underscore":">= 1.2.2","mongodb":"*"},"devDependencies":{"mocha":"~1.12","chai":"~1.7.2"},"scripts":{"test":"mocha test/runner.js --reporter spec"},"bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.2.6","dist":{"shasum":"72cc488f7ac085d148b572b08060a399d06a2647","tarball":"https://registry.npmjs.org/acl/-/acl-0.2.6.tgz","integrity":"sha512-JA/J6eETva4VEhlLnG2AgQ98uS4Z5D/Ec6/p4wdGEiOiMs1hJjwJTVLPRNEUK8dRqSgkAb2POl27zulzhCpK4g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEbYefZqF75VCX0DrVXvh2UxOizVCXUFqr0s61cv6UqQIhAJLt2Mje0h1l6CmCmPWpuNmdh0iUsFoYyPpWNpFh6Nat"}]},"_from":".","_npmVersion":"1.2.24","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.3.0":{"name":"acl","version":"0.3.0","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","mongodb":"*","bluebird":"~0.11.6-0","lodash":"~2.4.1","async":"~0.2.9"},"devDependencies":{"mocha":"~1.12","chai":"~1.7.2"},"scripts":{"test":"mocha test/runner.js --reporter spec","cover":"istanbul cover -- _mocha test/runner.js --reporter spec"},"bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.3.0","dist":{"shasum":"d2bb11608c769061a579fc27d07ae8f0a32e7200","tarball":"https://registry.npmjs.org/acl/-/acl-0.3.0.tgz","integrity":"sha512-vU5AIKfLP60j+PBErWLPZmAaRpZX2Y5Ibut8EFIsSdCd8UcLW7vSUpsBKow4baYihZMIE5V56g8uyuQE4/9LJA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDy2Eu0T5TPP4z4CIugSDfrJplbHYiCG8fI0+iGylRy8QIgZn38m8Onw6ELlQNFJcbj9UInWBIYXTuOp9OyHFK/JME="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}]},"0.4.0":{"name":"acl","version":"0.4.0","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","mongodb":"*","bluebird":"~0.11.6-0","lodash":"~2.4.1","async":"~0.2.9"},"devDependencies":{"mocha":"~1.12","chai":"~1.7.2"},"scripts":{"test":"mocha test/runner.js --reporter spec","cover":"istanbul cover -- _mocha test/runner.js --reporter spec"},"bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.4.0","_shasum":"62072f365123965236de017b952be601b90eea1c","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"dist":{"shasum":"62072f365123965236de017b952be601b90eea1c","tarball":"https://registry.npmjs.org/acl/-/acl-0.4.0.tgz","integrity":"sha512-KJ6hUanXbex/G2s7C1ZSgM5NpxWv+KmnnhRpz/grYgKcHh6qv3DmsDUDHmBTfMS5prwCffZeZswb/qdimrW1tQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfO7pi1o4gXl5iOaAsHlb8uUmDGHICXoOKK6+OZxatEAiA7FG2DmWyMLFj9MYsNSLMfgvGBS11mZVbq+ru5QAn0+Q=="}]}},"0.4.1":{"name":"acl","version":"0.4.1","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"redis":">= 0.7.1","mongodb":"*","bluebird":"~0.11.6-0","lodash":"~2.4.1","async":"~0.2.9"},"devDependencies":{"mocha":"~1.12","chai":"~1.7.2"},"scripts":{"test":"mocha test/runner.js --reporter spec","cover":"istanbul cover -- _mocha test/runner.js --reporter spec"},"bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.4.1","_shasum":"9cc886eb9e5191ceecc9791405d22263d7a05e2d","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"dist":{"shasum":"9cc886eb9e5191ceecc9791405d22263d7a05e2d","tarball":"https://registry.npmjs.org/acl/-/acl-0.4.1.tgz","integrity":"sha512-kDGeRjRoJb2KyDWsLbLqAHx6+yVvk5yJoRgxb6lJiAz0WTGya2D6r/i4X0MGc7l/9xUNDNiYmeG7x9HD/Sjslw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCn9RhM1UH6Xff49ArVO7nGuSp94hMOrIkGEnJNu1hHFwIhAMjadJ5h7/57JQ9hNQqTrOmqQHAlz6zPZoMXHx0w3csM"}]}},"0.4.2":{"name":"acl","version":"0.4.2","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"async":"~0.2.9","bluebird":"^1.2.4","lodash":"~2.4.1","mongodb":"*","redis":">= 0.7.1"},"devDependencies":{"mocha":"~1.12","chai":"~1.7.2"},"scripts":{"test":"mocha test/runner.js --reporter spec","cover":"istanbul cover -- _mocha test/runner.js --reporter spec"},"bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.4.2","_shasum":"eefed6221d98b20d5fa7b6d2cefbd472ade1b11e","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"dist":{"shasum":"eefed6221d98b20d5fa7b6d2cefbd472ade1b11e","tarball":"https://registry.npmjs.org/acl/-/acl-0.4.2.tgz","integrity":"sha512-NaiO0s7enYzaWTBIKNt3I9E95gZ0PYiK6tadT+W8/zK6yfMb5MWb78Mk+Fuclwe/aDMPcsNolyuyKpLCnaXYHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAN/yegwOq+ZYh2qLtISh3ZhHUrxuIy7I2Tqp6Q66TNeAiEAvb99x/zWVoj291nAwDZ0vF5jDLDmVUR1l6ogcdeKdqo="}]}},"0.4.3":{"name":"acl","version":"0.4.3","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"async":"~0.2.9","bluebird":"^1.2.4","lodash":"~2.4.1","mocha":"^1.21.3","mongodb":"*","redis":">= 0.7.1"},"devDependencies":{"mocha":"~1.12","chai":"~1.7.2"},"scripts":{"test":"mocha test/runner.js --reporter spec","cover":"istanbul cover -- _mocha test/runner.js --reporter spec"},"bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.4.3","_shasum":"fb85c426a56acc2a72d771a09e93404f1cd807f6","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"dist":{"shasum":"fb85c426a56acc2a72d771a09e93404f1cd807f6","tarball":"https://registry.npmjs.org/acl/-/acl-0.4.3.tgz","integrity":"sha512-p9GthJFEfJjk93Gq14K6aB1//kJLUr0dmbxIiE0lPuMikIe1UiZvELkKMMS0Y3Sc7zQlmLSXXbDZCK/ECHKn/Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTqIreOu+WpucuDgbFu+5Rp7neBeDNE3YPbbUXYX5v4gIhANXDMNVt8+yC3R1dbxKQ1LtKw6Alo5pZ4KqWG3kQWDL/"}]}},"0.4.4":{"name":"acl","version":"0.4.4","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.4.1"},"main":"./index.js","dependencies":{"async":"~0.2.9","bluebird":"^2.2.2","lodash":"~2.4.1","mocha":"^1.21.3","mongodb":"*","redis":">= 0.7.1"},"devDependencies":{"mocha":"~1.12","chai":"~1.7.2"},"scripts":{"test":"mocha test/runner.js --reporter spec","cover":"istanbul cover -- _mocha test/runner.js --reporter spec"},"gitHead":"4f30d99b79f0701421145254936f16ad46c7ebe1","bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.4.4","_shasum":"5120676c5880cbc4d55f3f11504a1529b0abe5ef","_from":".","_npmVersion":"1.4.23","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"dist":{"shasum":"5120676c5880cbc4d55f3f11504a1529b0abe5ef","tarball":"https://registry.npmjs.org/acl/-/acl-0.4.4.tgz","integrity":"sha512-93E6htJMs3Q/HDBi3eH9iWuf3GV5nbAkdW4xrGenEI5ken1NtLz0PL5pjMbG5nstZtbGtgLOiz+Siq9KZ53e8g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzGTEvPME2xc5RjPJ9dYRV3xDcpCFdToucGc+A3JTlcwIhALqZQFJreNiIeMYqxs6GOmIy/NKOl5lH/CgfoCaKwlSN"}]}},"0.4.6":{"name":"acl","version":"0.4.6","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.10"},"main":"./index.js","dependencies":{"async":"~0.9.0","bluebird":"^2.3.11","lodash":"~2.4.1","mongodb":"^1.4.23","redis":">=0.12.1"},"devDependencies":{"mocha":"^2.0.1","chai":"~1.10.0"},"scripts":{"test":"mocha test/runner.js --reporter spec","cover":"istanbul cover -- _mocha test/runner.js --reporter spec"},"gitHead":"c0521158bd30a7c60447048c35f5bbcb2702d22f","bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.4.6","_shasum":"91e0a27cfd2528ecbebb958aef492cddc1f4658b","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"dist":{"shasum":"91e0a27cfd2528ecbebb958aef492cddc1f4658b","tarball":"https://registry.npmjs.org/acl/-/acl-0.4.6.tgz","integrity":"sha512-x6quhgVo9wZ1idIP9cYc51rebeswxbLJp9YeOXF70z7J4+TP4nXmZueTLEV7OBMdjSxbtQdjpY4+vAhLcT7mwg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG5LfQDe3bvc/bXu6wtwpcQH+re14FpPV/Bu5Muq1BGvAiBkTveB1MBQ35hnVM90AN8OwIC+H2xHTFHnQdOX6BNYCA=="}]}},"0.4.7":{"name":"acl","version":"0.4.7","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.10"},"main":"./index.js","dependencies":{"async":"~0.9.0","bluebird":"^2.3.11","lodash":"~2.4.1","mongodb":"^1.4.23","redis":">=0.12.1"},"devDependencies":{"mocha":"^2.0.1","chai":"~1.10.0"},"scripts":{"test":"mocha test/runner.js --reporter spec","cover":"istanbul cover -- _mocha test/runner.js --reporter spec"},"gitHead":"e918b6dc6af9f0a910ab295f2ce5a9587d01e17e","bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.4.7","_shasum":"4d8608571238f8f02db7a00a28b4d3d24d3435fd","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"dist":{"shasum":"4d8608571238f8f02db7a00a28b4d3d24d3435fd","tarball":"https://registry.npmjs.org/acl/-/acl-0.4.7.tgz","integrity":"sha512-M29Q6ifp/s5WvmB1tvusDcCF1MzsJZ3caeSDeCRypRgV9+jdJuhonSFMnFT3HhrLFfAOj1dN6IHquinrhxsJQA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHIJtP26K8JAkIVvL8w4tbY9L2P7LMBKjlCxuABYAVK1AiBdSe9F+5upLbBASrVBHBdPXpW2q23FlhOknL/q3Fn/OQ=="}]}},"0.4.8":{"name":"acl","version":"0.4.8","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.10"},"main":"./index.js","dependencies":{"async":"~1.4.0","bluebird":"^2.9.34","lodash":"~3.10.0","mongodb":"^2.0.39","redis":">=0.12.1"},"devDependencies":{"mocha":"^2.2.5","chai":"~3.2.0"},"scripts":{"test":"mocha test/runner.js --reporter spec","cover":"istanbul cover -- _mocha test/runner.js --reporter spec"},"gitHead":"6396cdc3c5ed2a6875c11f0fc1f83d50916388fd","bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.4.8","_shasum":"aecb82457dfe87d2f4300873cac8b372d074b39d","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"dist":{"shasum":"aecb82457dfe87d2f4300873cac8b372d074b39d","tarball":"https://registry.npmjs.org/acl/-/acl-0.4.8.tgz","integrity":"sha512-L+XmTgyu1ST2fFbuAN+G2mSMkLRY3xP8W1XZAscphmFOydSu9lwVZrggCaGt67yGOM8g0vTMwC3H+hLVEqloOQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCD/VOsp+RPS/oF5kFvFBSTyjA7i+/5VjU327Xb48/l9wIgD3mdMDMp16t/fTrHL5UtUvfwGUB+//1gFCRs3WMG3/U="}]}},"0.4.9":{"name":"acl","version":"0.4.9","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.10"},"main":"./index.js","dependencies":{"async":"~1.4.0","bluebird":"^2.9.34","lodash":"~3.10.0","mongodb":"^2.0.39","redis":">=0.12.1"},"devDependencies":{"mocha":"^2.2.5","chai":"~3.2.0"},"scripts":{"test":"mocha test/runner.js --reporter spec","cover":"istanbul cover -- _mocha test/runner.js --reporter spec"},"gitHead":"c25e9f6b5c7bb898a8b7cf49fd41f9d6eb64be34","bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.4.9","_shasum":"dc72e21b3448539ebb8201bae9e854a98fd5983b","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"dist":{"shasum":"dc72e21b3448539ebb8201bae9e854a98fd5983b","tarball":"https://registry.npmjs.org/acl/-/acl-0.4.9.tgz","integrity":"sha512-zm202DtESLG+2qmH0g8f3/Dw6lQy8RKqycJiBsEp9GmqWX13J6Of75xs0VZWPGzlNl9dhYzf1cZGXBg/q9OZHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICQ6p8DXhcSZ3flNkoEObgCBrQlssSl3J3WDTq7lYfsoAiEAmTKCYwOlYlFbxDRz4AYnsqctIGZtLMPpNOAMLm62O/k="}]}},"0.4.10":{"name":"acl","version":"0.4.10","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.10"},"main":"./index.js","dependencies":{"async":"^2.1.4","bluebird":"^3.0.2","lodash":"^4.17.3","mongodb":"^2.0.47","redis":"^2.2.5"},"devDependencies":{"mocha":"^3.2.0","chai":"^3.4.0"},"scripts":{"test":"mocha test/runner.js --reporter spec","cover":"istanbul cover -- _mocha test/runner.js --reporter spec"},"gitHead":"e69042e5c415830196f4872ee3b753ceb7adfa19","bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.4.10","_shasum":"f7aa672421cd1ef7da74674577b2c6a9052cf9bd","_from":".","_npmVersion":"3.10.9","_nodeVersion":"6.9.2","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"dist":{"shasum":"f7aa672421cd1ef7da74674577b2c6a9052cf9bd","tarball":"https://registry.npmjs.org/acl/-/acl-0.4.10.tgz","integrity":"sha512-c1k2FMCTW3cD/nQf52bYnkICqqoAmBij47MHdqMIXsiKIUIjDAvdXHvYhohpx/fckiEc6Rabpcl037T2uHMGtA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBH46O8gbE9FlgpG6lAgmReNfODbtsBvUFgsKgB6MFprAiEAxZK4jJ895E9LWh9nKmr0VmhwWmoIqMQZl4t/Uy+R28U="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/acl-0.4.10.tgz_1484122231805_0.7089399148244411"}},"0.4.11":{"name":"acl","version":"0.4.11","description":"An Access Control List module, based on Redis with Express middleware support","keywords":["middleware","acl","web"],"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"homepage":"https://github.com/optimalbits/node_acl","engines":{"node":">= 0.10"},"main":"./index.js","dependencies":{"async":"^2.1.4","bluebird":"^3.0.2","lodash":"^4.17.3","mongodb":"^2.0.47","redis":"^2.2.5"},"devDependencies":{"mocha":"^3.2.0","chai":"^3.4.0"},"scripts":{"test":"mocha test/runner.js --reporter spec","cover":"istanbul cover -- _mocha test/runner.js --reporter spec"},"gitHead":"7d151fdae37703bcd495b41e7c220be004928648","bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"_id":"acl@0.4.11","_shasum":"002cc766ebf25cda8fe532b56f3651bebdb25b3a","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.11.0","_npmUser":{"name":"manast","email":"manuel@optimalbits.com"},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"dist":{"shasum":"002cc766ebf25cda8fe532b56f3651bebdb25b3a","tarball":"https://registry.npmjs.org/acl/-/acl-0.4.11.tgz","integrity":"sha512-4AGXAEZ80JEGbB99qxvaBj0Gkba9fFivf4GMhYZdMlIV7eQpBWud6PaPFfksWDb0xO584tCChhOIeV0JR3kXIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGsSAtMxDBHoisYzzQXVc7mZgOgJGGEXwGoy0gVS/OK4AiASj8j80UrdvGPYRCCOTugggPtze5X1tJIeIqOloyFevw=="}]},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/acl-0.4.11.tgz_1505032757978_0.005339400377124548"}}},"maintainers":[{"name":"manast","email":"manuel@optimalbits.com"}],"time":{"modified":"2022-06-13T02:22:26.782Z","created":"2011-08-16T22:16:47.547Z","0.0.1":"2011-08-16T22:16:48.433Z","0.0.2":"2011-08-16T22:20:36.133Z","0.0.3":"2011-08-17T09:29:48.291Z","0.0.4":"2011-09-21T08:14:45.601Z","0.1.0":"2011-11-20T22:30:52.339Z","0.1.1":"2011-11-22T09:08:44.754Z","0.1.2":"2011-11-24T12:02:04.551Z","0.1.3":"2011-12-04T21:12:10.162Z","0.1.4":"2012-02-19T16:42:42.280Z","0.2.0":"2012-08-29T18:17:16.760Z","0.2.1":"2012-08-31T19:42:30.892Z","0.2.2":"2012-09-01T18:46:28.965Z","0.2.3":"2013-01-08T20:17:07.106Z","0.2.4":"2013-08-23T06:49:34.258Z","0.2.5":"2013-08-27T18:46:15.763Z","0.2.6":"2013-10-17T19:03:59.977Z","0.3.0":"2014-03-26T17:38:27.525Z","0.4.0":"2014-05-23T07:32:33.920Z","0.4.1":"2014-06-02T21:17:36.056Z","0.4.2":"2014-06-04T19:12:44.703Z","0.4.3":"2014-08-01T08:35:51.448Z","0.4.4":"2014-09-08T14:35:57.713Z","0.4.6":"2014-12-08T09:42:53.499Z","0.4.7":"2015-01-01T10:47:09.607Z","0.4.8":"2015-08-05T19:12:34.698Z","0.4.9":"2015-09-10T16:44:53.965Z","0.4.10":"2017-01-11T08:10:34.197Z","0.4.11":"2017-09-10T08:39:19.159Z"},"author":{"name":"Manuel Astudillo","email":"manuel@optimalbits.com"},"repository":{"type":"git","url":"git://github.com/optimalbits/node_acl.git"},"users":{"paularmstrong":true,"majj":true,"uwo":true,"nbarr":true,"christophertrudel":true,"knight-of-design":true,"marsch":true,"bm0nkey":true,"ilonghi":true,"marlic":true,"farukscan":true,"dlpowless":true,"findemor":true,"pulpfree":true,"chenzww":true,"mjurincic":true,"tchcxp":true,"luuhoangnam":true,"morphesus":true,"rbecheras":true,"markthethomas":true,"wulfgarpro":true,"ssljivic":true,"molestt":true,"rakeshmakam":true,"yeremeyev":true,"eruditecat":true,"lukaserat":true,"oleg_tsyba":true,"jmsherry":true,"ungurys":true,"hckhanh":true,"alxarch":true,"antixrist":true,"hexcola":true,"jybleau":true,"debearloper":true,"sachacr":true,"rsp":true,"programmer.severson":true,"nicomf1982":true,"embura":true,"yazanrawashdeh":true,"benignradiance":true,"toszter":true,"rocket0191":true,"danyadsmith":true,"alkiko":true,"jakub.knejzlik":true,"goliatone":true,"nisimjoseph":true,"sinfex":true,"zuojiang":true,"brend":true,"jream":true,"nardhar":true,"deividasjackus":true,"jasonwang1888":true,"he313572052":true,"kodekracker":true},"readme":"# NODE ACL - Access Control Lists for Node\n\nThis module provides a minimalistic ACL implementation inspired by Zend_ACL.\n\nWhen you develop a web site or application you will soon notice that sessions are not enough to protect all the\navailable resources. Avoiding that malicious users access other users content proves a much more\ncomplicated task than anticipated. ACL can solve this problem in a flexible and elegant way.\n\nCreate roles and assign roles to users. Sometimes it may even be useful to create one role per user,\nto get the finest granularity possible, while in other situations you will give the *asterisk* permission\nfor admin kind of functionality.\n\nA Redis, MongoDB and In-Memory based backends are provided built-in in the module. There are other third party backends such as [*knex*](https://github.com/christophertrudel/node_acl_knex) based, [*firebase*](https://github.com/tonila/node_acl_firebase) and [*elasticsearch*](https://github.com/adnanesaghir/acl-elasticsearch-backend). There is also an alternative memory backend that supports [*regexps*](https://github.com/futurechan/node_acl-mem-regexp).\n\nFollow [manast](http://twitter.com/manast) for news and updates regarding this library.\n\n## Status\n\n[![BuildStatus](https://secure.travis-ci.org/OptimalBits/node_acl.png?branch=master)](http://travis-ci.org/OptimalBits/node_acl)\n[![Dependency Status](https://david-dm.org/OptimalBits/node_acl.svg)](https://david-dm.org/OptimalBits/node_acl)\n[![devDependency Status](https://david-dm.org/OptimalBits/node_acl/dev-status.svg)](https://david-dm.org/OptimalBits/node_acl#info=devDependencies)\n\n## Features\n\n- Users\n- Roles\n- Hierarchies\n- Resources\n- Express middleware for protecting resources.\n- Robust implementation with good unit test coverage.\n\n## Installation\n\nUsing npm:\n\n```javascript\nnpm install acl\n```\n\n## Documentation\n\n* [addUserRoles](#addUserRoles)\n* [removeUserRoles](#removeUserRoles)\n* [userRoles](#userRoles)\n* [roleUsers](#roleUsers)\n* [hasRole](#hasRole)\n* [addRoleParents](#addRoleParents)\n* [removeRoleParents](#removeRoleParents)\n* [removeRole](#removeRole)\n* [removeResource](#removeResource)\n* [allow](#allow)\n* [removeAllow](#removeAllow)\n* [allowedPermissions](#allowedPermissions)\n* [isAllowed](#isAllowed)\n* [areAnyRolesAllowed](#areAnyRolesAllowed)\n* [whatResources](#whatResources)\n* [middleware](#middleware)\n* [backend](#backend)\n\n## Examples\n\nCreate your acl module by requiring it and instantiating it with a valid backend instance:\n\n```javascript\nvar acl = require('acl');\n\n// Using redis backend\nacl = new acl(new acl.redisBackend(redisClient, prefix));\n\n// Or Using the memory backend\nacl = new acl(new acl.memoryBackend());\n\n// Or Using the mongodb backend\nacl = new acl(new acl.mongodbBackend(dbInstance, prefix));\n```\n\nAll the following functions return a promise or optionally take a callback with\nan err parameter as last parameter. We omit them in the examples for simplicity.\n\nCreate roles implicitly by giving them permissions:\n\n```javascript\n// guest is allowed to view blogs\nacl.allow('guest', 'blogs', 'view')\n\n// allow function accepts arrays as any parameter\nacl.allow('member', 'blogs', ['edit', 'view', 'delete'])\n```\n\nUsers are likewise created implicitly by assigning them roles:\n\n```javascript\nacl.addUserRoles('joed', 'guest')\n```\n\nHierarchies of roles can be created by assigning parents to roles:\n\n```javascript\nacl.addRoleParents('baz', ['foo', 'bar'])\n```\n\nNote that the order in which you call all the functions is irrelevant (you can add parents first and assign permissions to roles later)\n\n```javascript\nacl.allow('foo', ['blogs', 'forums', 'news'], ['view', 'delete'])\n```\n\nUse the wildcard to give all permissions:\n\n```javascript\nacl.allow('admin', ['blogs', 'forums'], '*')\n```\n\nSometimes is necessary to set permissions on many different roles and resources. This would\nlead to unnecessary nested callbacks for handling errors. Instead use the following:\n\n```javascript\nacl.allow([\n    {\n        roles:['guest', 'member'],\n        allows:[\n            {resources:'blogs', permissions:'get'},\n            {resources:['forums', 'news'], permissions:['get', 'put', 'delete']}\n        ]\n    },\n    {\n        roles:['gold', 'silver'],\n        allows:[\n            {resources:'cash', permissions:['sell', 'exchange']},\n            {resources:['account', 'deposit'], permissions:['put', 'delete']}\n        ]\n    }\n])\n```\n\nYou can check if a user has permissions to access a given resource with *isAllowed*:\n\n```javascript\nacl.isAllowed('joed', 'blogs', 'view', function(err, res){\n    if(res){\n        console.log(\"User joed is allowed to view blogs\")\n    }\n})\n```\n\n\nOf course arrays are also accepted in this function:\n\n```javascript\nacl.isAllowed('jsmith', 'blogs', ['edit', 'view', 'delete'])\n```\n\nNote that all permissions must be fulfilled in order to get *true*.\n\n\nSometimes is necessary to know what permissions a given user has over certain resources:\n\n```javascript\nacl.allowedPermissions('james', ['blogs', 'forums'], function(err, permissions){\n    console.log(permissions)\n})\n```\n\nIt will return an array of resource:[permissions] like this:\n\n```javascript\n[{'blogs' : ['get', 'delete']},\n {'forums':['get', 'put']}]\n```\n\n\nFinally, we provide a middleware for Express for easy protection of resources.\n\n```javascript\nacl.middleware()\n```\n\nWe can protect a resource like this:\n\n```javascript\napp.put('/blogs/:id', acl.middleware(), function(req, res, next){…}\n```\n\nThe middleware will protect the resource named by *req.url*, pick the user from *req.session.userId* and check the permission for *req.method*, so the above would be equivalent to something like this:\n\n```javascript\nacl.isAllowed(req.session.userId, '/blogs/12345', 'put')\n```\n\nThe middleware accepts 3 optional arguments, that are useful in some situations. For example, sometimes we\ncannot consider the whole url as the resource:\n\n```javascript\napp.put('/blogs/:id/comments/:commentId', acl.middleware(3), function(req, res, next){…}\n```\n\nIn this case the resource will be just the three first components of the url (without the ending slash).\n\nIt is also possible to add a custom userId or check for other permissions than the method:\n\n```javascript\napp.put('/blogs/:id/comments/:commentId', acl.middleware(3, 'joed', 'post'), function(req, res, next){…}\n```\n\n## Methods\n\n<a name=\"addUserRoles\"/>\n\n### addUserRoles( userId, roles, function(err) )\n\nAdds roles to a given user id.\n\n__Arguments__\n\n```javascript\n    userId   {String|Number} User id.\n    roles    {String|Array} Role(s) to add to the user id.\n    callback {Function} Callback called when finished.\n```\n\n---------------------------------------\n\n<a name=\"removeUserRoles\"/>\n\n### removeUserRoles( userId, roles, function(err) )\n\nRemove roles from a given user.\n\n__Arguments__\n\n```javascript\n    userId   {String|Number} User id.\n    roles    {String|Array} Role(s) to remove to the user id.\n    callback {Function} Callback called when finished.\n```\n\n---------------------------------------\n\n<a name=\"userRoles\" />\n\n### userRoles( userId, function(err, roles) )\n\nReturn all the roles from a given user.\n\n__Arguments__\n\n```javascript\n    userId   {String|Number} User id.\n    callback {Function} Callback called when finished.\n```\n\n---------------------------------------\n\n<a name=\"roleUsers\" />\n\n### roleUsers( rolename, function(err, users) )\n\nReturn all users who has a given role.\n\n__Arguments__\n\n```javascript\n    rolename   {String|Number} User id.\n    callback {Function} Callback called when finished.\n```\n\n---------------------------------------\n\n<a name=\"hasRole\" />\n\n### hasRole( userId, rolename, function(err, hasRole) )\n\nReturn boolean whether user has the role\n\n__Arguments__\n\n```javascript\n    userId   {String|Number} User id.\n    rolename {String|Number} role name.\n    callback {Function} Callback called when finished.\n```\n\n---------------------------------------\n\n<a name=\"addRoleParents\" />\n\n### addRoleParents( role, parents, function(err) )\n\nAdds a parent or parent list to role.\n\n__Arguments__\n\n```javascript\n    role     {String} Child role.\n    parents  {String|Array} Parent role(s) to be added.\n    callback {Function} Callback called when finished.\n```\n\n---------------------------------------\n\n<a name=\"removeRoleParents\" />\n\n### removeRoleParents( role, parents, function(err) )\n\nRemoves a parent or parent list from role.\n\nIf `parents` is not specified, removes all parents.\n\n__Arguments__\n\n```javascript\n    role     {String} Child role.\n    parents  {String|Array} Parent role(s) to be removed [optional].\n    callback {Function} Callback called when finished [optional].\n```\n\n---------------------------------------\n\n<a name=\"removeRole\" />\n\n### removeRole( role, function(err) )\n\nRemoves a role from the system.\n\n__Arguments__\n\n```javascript\n    role     {String} Role to be removed\n    callback {Function} Callback called when finished.\n```\n\n---------------------------------------\n\n<a name=\"removeResource\" />\n### removeResource( resource, function(err) )\n\nRemoves a resource from the system\n\n__Arguments__\n\n```javascript\n    resource {String} Resource to be removed\n    callback {Function} Callback called when finished.\n```\n\n---------------------------------------\n\n<a name=\"allow\" />\n\n### allow( roles, resources, permissions, function(err) )\n\nAdds the given permissions to the given roles over the given resources.\n\n__Arguments__\n\n```javascript\n    roles       {String|Array} role(s) to add permissions to.\n    resources   {String|Array} resource(s) to add permisisons to.\n    permissions {String|Array} permission(s) to add to the roles over the resources.\n    callback    {Function} Callback called when finished.\n```\n\n### allow( permissionsArray, function(err) )\n\n__Arguments__\n\n```javascript\n    permissionsArray {Array} Array with objects expressing what permissions to give.\n       [{roles:{String|Array}, allows:[{resources:{String|Array}, permissions:{String|Array}]]\n\n    callback         {Function} Callback called when finished.\n```\n\n---------------------------------------\n\n<a name=\"removeAllow\" />\n\n###  removeAllow( role, resources, permissions, function(err) )\n\nRemove permissions from the given roles owned by the given role.\n\nNote: we loose atomicity when removing empty role_resources.\n\n__Arguments__\n\n```javascript\n    role        {String}\n    resources   {String|Array}\n    permissions {String|Array}\n    callback    {Function}\n```\n\n---------------------------------------\n\n<a name=\"allowedPermissions\" />\n\n### allowedPermissions( userId, resources, function(err, obj) )\n\nReturns all the allowable permissions a given user have to\naccess the given resources.\n\nIt returns an array of objects where every object maps a\nresource name to a list of permissions for that resource.\n\n__Arguments__\n\n```javascript\n    userId    {String|Number} User id.\n    resources {String|Array} resource(s) to ask permissions for.\n    callback  {Function} Callback called when finished.\n```\n\n---------------------------------------\n\n<a name=\"isAllowed\" />\n\n### isAllowed( userId, resource, permissions, function(err, allowed) )\n\nChecks if the given user is allowed to access the resource for the given\npermissions (note: it must fulfill all the permissions).\n\n__Arguments__\n\n```javascript\n    userId      {String|Number} User id.\n    resource    {String} resource to ask permissions for.\n    permissions {String|Array} asked permissions.\n    callback    {Function} Callback called with the result.\n```\n\n---------------------------------------\n<a name=\"areAnyRolesAllowed\" />\n\n### areAnyRolesAllowed( roles, resource, permissions, function(err, allowed) )\n\nReturns true if any of the given roles have the right permissions.\n\n__Arguments__\n\n```javascript\n    roles       {String|Array} Role(s) to check the permissions for.\n    resource    {String} resource to ask permissions for.\n    permissions {String|Array} asked permissions.\n    callback    {Function} Callback called with the result.\n```\n\n---------------------------------------\n<a name=\"whatResources\" />\n\n### whatResources(role, function(err, {resourceName: [permissions]})\n\nReturns what resources a given role has permissions over.\n\n__Arguments__\n\n```javascript\n    role        {String|Array} Roles\n    callback    {Function} Callback called with the result.\n```\n\nwhatResources(role, permissions, function(err, resources) )\n\nReturns what resources a role has the given permissions over.\n\n__Arguments__\n\n```javascript\n    role        {String|Array} Roles\n    permissions {String|Array} Permissions\n    callback    {Function} Callback called with the result.\n```\n\n---------------------------------------\n\n<a name=\"middleware\" />\n\n### middleware( [numPathComponents, userId, permissions] )\n\nMiddleware for express.\n\nTo create a custom getter for userId, pass a function(req, res) which returns the userId when called (must not be async).\n\n__Arguments__\n\n```javascript\n    numPathComponents {Number} number of components in the url to be considered part of the resource name.\n    userId            {String|Number|Function} the user id for the acl system (defaults to req.session.userId)\n    permissions       {String|Array} the permission(s) to check for (defaults to req.method.toLowerCase())\n```\n\n---------------------------------------\n\n<a name=\"backend\" />\n\n### backend( db, [prefix] )\n\nCreates a backend instance. All backends except Memory require driver or database instance. `useSingle` is only applicable to the MongoDB backend.\n\n__Arguments__\n\n```javascript\n    db        {Object} Database instance\n    prefix    {String} Optional collection prefix\n    useSingle     {Boolean} Create one collection for all resources (defaults to false)\n```\n\n```javascript\nvar mongodb = require('mongodb');\nmongodb.connect(\"mongodb://127.0.0.1:27017/acltest\", function(error, db) {\n  var mongoBackend = new acl.mongodbBackend(db, 'acl_');\n});\n```\n\nCreates a new MongoDB backend using database instance `db`.\n\n```javascript\nvar client = require('redis').createClient(6379, '127.0.0.1', {no_ready_check: true});\nvar redisBackend = new acl.redisBackend(client);\n```\n\nCreates a new Redis backend using Redis client `client`.\n\n## Tests\n\nRun tests with `npm` (requires mocha):\n```javascript\n npm test\n```\n\n## Future work\n\n- Support for denials (deny a role a given permission)\n\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2011-2013 Manuel Astudillo <manuel@optimalbits.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","homepage":"https://github.com/optimalbits/node_acl","keywords":["middleware","acl","web"],"bugs":{"url":"https://github.com/optimalbits/node_acl/issues"},"readmeFilename":"README.md"}