From 0e4e30604615f2ec85e740d0ddb4fad9719d00bc Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Sun, 26 Aug 2012 11:58:03 -0400 Subject: [PATCH] Got accessControl working!!! --- lib/server/index.js | 1 + lib/server/setupStore.js | 16 ++++++++++------ src/server/index.coffee | 3 ++- src/server/setupStore.coffee | 22 ++++++++++------------ 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/lib/server/index.js b/lib/server/index.js index d268ad9b0f..ad135778ef 100644 --- a/lib/server/index.js +++ b/lib/server/index.js @@ -53,6 +53,7 @@ habitrpgMiddleware = function(req, res, next) { model.setNull('_userId', req.session.userId); model.set('_mobileDevice', /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header('User-Agent'))); model.set('_nodeEnv', process.env.NODE_ENV); + require('./setupStore').accessControl(store); return next(); }; diff --git a/lib/server/setupStore.js b/lib/server/setupStore.js index 1f194c828d..d27f930257 100644 --- a/lib/server/setupStore.js +++ b/lib/server/setupStore.js @@ -7,12 +7,16 @@ module.exports.queries = function(store) { }; module.exports.accessControl = function(store) { - store.readPathAccess('users.*', function(userId, accept) { - console.log(accept, 'read.accept'); - return accept(userId === this.session.userId); + store.accessControl = true; + store.readPathAccess('users.*', function(captures, next) { + var allowed; + allowed = captures === this.session.userId; + return next(allowed); }); - return store.writeAccess('*', 'users.*', function(mutator, userId, accept) { - console.log(accept, 'write.accept'); - return accept(userId === this.session.userId); + return store.writeAccess('*', 'users.*', function(captures, value, next) { + var allowed, pathArray; + pathArray = captures.split('.'); + allowed = pathArray[0] === this.session.userId; + return next(allowed); }); }; diff --git a/src/server/index.coffee b/src/server/index.coffee index a71d118eef..ddc6ae6298 100644 --- a/src/server/index.coffee +++ b/src/server/index.coffee @@ -24,7 +24,6 @@ derby.use(require 'racer-db-mongo') store = derby.createStore db: {type: 'Mongo', uri: process.env.NODE_DB_URI} listen: server -# require('./setupStore').accessControl(store) ONE_YEAR = 1000 * 60 * 60 * 24 * 365 root = path.dirname path.dirname __dirname @@ -42,6 +41,8 @@ habitrpgMiddleware = (req, res, next) -> # same for production/development model.set '_nodeEnv', process.env.NODE_ENV + + require('./setupStore').accessControl(store) next() diff --git a/src/server/setupStore.coffee b/src/server/setupStore.coffee index 3e01e2ceb0..003a9ef4d6 100644 --- a/src/server/setupStore.coffee +++ b/src/server/setupStore.coffee @@ -4,17 +4,15 @@ module.exports.queries = (store) -> module.exports.accessControl = (store) -> - # store.accessControl = true + store.accessControl = true - # FIXME - # getting Property 'callback' of object 0,b800598e-0cc5-41e7-931f-431b8888e07a.2,set,users.be06f5d3-5ffd-4a9a-828f-87c5f43d3562,[object Object] is not a function - # at Object.module.exports.server._commit.res.fail (node_modules/derby/node_modules/racer/lib/txns/txns.Model.js:319:22) - # at node_modules/derby/node_modules/racer/lib/accessControl/accessControl.Store.js:221:34 - - store.readPathAccess 'users.*', (userId, accept) -> - console.log accept, 'read.accept' - accept(userId == @session.userId) + store.readPathAccess 'users.*', (captures, next) -> + allowed = (captures == @session.userId) + # console.log { readPathAccess: {captures:captures, sessionUserId:@session.userId, allowed:allowed, next:next} } + next(allowed) - store.writeAccess '*', 'users.*', (mutator, userId, accept) -> - console.log accept, 'write.accept' - accept(userId == @session.userId) + store.writeAccess '*', 'users.*', (captures, value, next) -> + pathArray = captures.split('.') + allowed = (pathArray[0] == @session.userId) + # console.log { writeAccess: {captures:captures, value:value, next:next, pathArray:pathArray} } + next(allowed)