Skip to content

Commit

Permalink
migrating the architecture from events to callbacks in views
Browse files Browse the repository at this point in the history
  • Loading branch information
geek-cetas committed May 3, 2011
1 parent 84a00dd commit 0ce4e6c
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 45 deletions.
7 changes: 4 additions & 3 deletions cms/models/group.js
Original file line number Original file line Diff line number Diff line change
@@ -1,14 +1,15 @@
var mongoose = require('mongoose'), var mongoose = require('mongoose'),
Schema = mongoose.Schema, Schema = mongoose.Schema,
Permission = require('./permissions').Permission; Permission = require('./permissions').Permission_model;


var Group = new Schema({ var Group = new Schema({
name : String, name : String,
Permissions : [Permission] permissions : [Schema.ObjectId]
}); });


mongoose.model( 'Group', Group ); mongoose.model( 'Group', Group );


module.exports = {Group : function() { module.exports = {Group : function() {
return mongoose.model('Group'); } return mongoose.model('Group'); },
Group_model : Group,
}; };
3 changes: 2 additions & 1 deletion cms/models/permissions.js
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ mongoose.model( 'Permission', Permission );


module.exports = {Permission : function() { module.exports = {Permission : function() {
return mongoose.model('Permission'); return mongoose.model('Permission');
} },
Permission_model : Permission
} }
13 changes: 9 additions & 4 deletions cms/models/user.js
Original file line number Original file line Diff line number Diff line change
@@ -1,20 +1,25 @@
var mongoose = require('mongoose'), var inherits = require('sys').inherits,
mongoose = require('mongoose'),
Group = require('./group').Group, Group = require('./group').Group,
Permission = require('./permissions').Permission, Permission = require('./permissions').Permission,
Schema = mongoose.Schema; Schema = mongoose.Schema;


var UserSchema = function(obj) {
}

var User = new Schema({ var User = new Schema({
name : String, name : String,
pwd : String, pwd : String,
is_staff : {type : Number, min : 0, max : 1, Default : 0}, is_staff : {type : Number, min : 0, max : 1, Default : 0},
is_active : {type : Number, min : 0, max : 1, Default : 1}, is_active : {type : Number, min : 0, max : 1, Default : 1},
is_superuser : {type : Number, min : 0, max : 1, Default : 0}, is_superuser : {type : Number, min : 0, max : 1, Default : 0},
Groups : [Group], groups : [Schema.ObjectId],
Permissions : [Permission] permissions : [Schema.ObjectId]
}); });


mongoose.model( 'User', User ); mongoose.model( 'User', User );
module.exports = {User : function() { module.exports = {User : function() {
return mongoose.model('User'); return mongoose.model('User');
} },
User_model : User
} }
8 changes: 4 additions & 4 deletions cms/views/groups.js
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ inherits( Operations, ev.EventEmitter );


Operations.prototype.create = function( name, permissions ) { Operations.prototype.create = function( name, permissions ) {
var $ = this; var $ = this;
var grp = new group; var grp = new group();
grp.name = name; grp.name = name;
if( permissions ) if( permissions )
grp.Permissions.push( {name : permissions.name, for( var index = 0; index < permissions.length; index++ )
code : permissions.code} ); grp.permissions.push( permissions[index]._id );


grp.save( function( err ) { grp.save( function( err ) {
ex( $, err, function() { ex( $, err, function() {
$.emit( 'create', $.grp ); $.emit( 'create', grp );
}); });
}); });
} }
Expand Down
2 changes: 1 addition & 1 deletion cms/views/permissions.js
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ inherits( Operations, ev.EventEmitter );


Operations.prototype.create = function( alias, name ) { Operations.prototype.create = function( alias, name ) {
var $ = this; var $ = this;
var perm = new permission({ 'name' : name, 'code' : alias }); var perm = new permission( {'name' : name, 'code' : alias} );
perm.save( function( error ) { perm.save( function( error ) {
ex( $, error, function() { ex( $, error, function() {
$.emit( 'create', perm ); $.emit( 'create', perm );
Expand Down
55 changes: 41 additions & 14 deletions cms/views/users.js
Original file line number Original file line Diff line number Diff line change
@@ -1,36 +1,63 @@
var ev = require('events'), var ev = require('events'),
inherits = require('sys').inherits, inherits = require('sys').inherits,
ex = require('../../../webcetas.node/ex').ex, safe = require('../../../webcetas.node/safe');
user = require('../models/user').User(); user = require('../models/user').User();


var Operations = function() { var Operations = function( uname ) {
} if( !uname ) return;


inherits( Operations, ev.EventEmitter ); var $ = this;
$.search( uname, function( user ) {
if( user.__proto__ == Array.prototype && user.length > 1 )
throw new Error("Invalid username. Duplicate entries");
else
$.user = user;
} );

}


Operations.prototype.create = function( name, pwd ) { Operations.prototype.create = function( name, pwd, callback ) {
var $ = this; var $ = this;
var usr = new user; var usr = new user;
usr.name = name; usr.name = name;
usr.pwd = pwd; usr.pwd = pwd;
usr.is_active = 1; usr.is_active = 1;
usr.save( function( err ) { usr.save( function( err ) {
ex( $, err, function() { $.user = usr;
$.emit( 'create', usr ); safe.ex( err, callback, usr );
});
}); });
} }


Operations.prototype.search = function( name ) { Operations.prototype.add_permission = function( permission, callback ) {
var $ = this; var $ = this;
user.find({'name' : name}, function( err, docs ) { if( this.user == null )
ex( $, err, function() { {
$.emit( 'search', docs.length ); throw new Error("Invalid user");
}); return false;
}
this.user.permissions.push( permission );
this.user.save( function( err ) {
safe.ex( err, callback, $.user );
}); });
} }


Operations.prototype.search = function( name, callback ) {
var $ = this;
user.find( {'name' : name}, function( err, docs ) {
safe.ex( err, callback, docs );
});
}

var has_perm = function( user, perm ) {
if( user.permissions )
for( var index = 0; index < user.permissions.length; index ++ )
if( permissions[index] == perm.code )
return true;
return false;
}

module.exports = {UserManager : function() { module.exports = {UserManager : function() {
return new Operations(); return new Operations();
} },
has_permission : has_perm,
} }
38 changes: 20 additions & 18 deletions test.js
Original file line number Original file line Diff line number Diff line change
@@ -1,25 +1,27 @@
var um = require('./cms/views/users').UserManager; var uo = require('./cms/views/users'),
var gm = require('./cms/views/groups').GroupManager; um = uo.UserManager,
var pm = require('./cms/views/permissions').PermissionsManager; go = require('./cms/views/groups'),
gm = go.GroupManager,
po = require('./cms/views/permissions'),
pm = po.PermissionsManager;


var newuser = (new um).on( 'create', var newuser = new um;
var newpm = new pm;

newpm.on( 'create', function( perm ) {
newgrp.create('dummy', new Array(perm));
console.log( newuser );
newuser.add_permission( perm, function() { console.log("Added"); } );
}).on( 'error', function( err ) {
console.log("ERROR : " + err);
});

newuser.create('kailash', 'kailash',
function( obj ) { function( obj ) {
var v = obj.is_active; newpm.create('bla', 'bla');
console.log(v + 1)
}).on( 'search', function( docs ) {
console.log(typeof( docs ));
}); });


var newgrp = (new gm).on( 'create', function( group ) { var newgrp = (new gm).on( 'create', function( group ) {
}); });


var newpm = (new pm).on( 'create', function( perm ) {
newgrp.create('dummy', perm);
}).on( 'error', function( err ) {
console.log("ERROR : " + err);
});


newuser.create('kailash', 'kals');
newuser.search('kailash');
newpm.create('hello', "Hello");
newgrp.search('dummy');

0 comments on commit 0ce4e6c

Please sign in to comment.