UNPKG

fis-cloud-app-compress

Version:

fis-cloud-app-compress

1 lines 2.68 kB
"use strict";var mongo=require("mongoskin"),db=mongo.db("localhost:8888/test"),DEFAULT_PERMISSION={owner:{root:1},mode:744},OPERATION_CODE={insert:2,remove:2,update:2,find:4},COLLECTION_LIST={user:"user",group:"group",resource:"resource"},exports=module.exports={};exports.validateUser=function(o,n){var i={_id:o};db.collection(COLLECTION_LIST.user).findOne(i,{_id:!0},function(o,i){o?n(o):i?n(null,i):(o="no user",n(o))})},exports.validatePermission=function(o,n,i,r,e){db.collection(o).find(n,{permission:!0}).toArray(function(o,n){if(o)e(o);else{var t=!0;n.forEach(function(n){n.permission||(n.permission=DEFAULT_PERMISSION);var s=n.permission.mode,l=n.permission.owner,u=n.permission.group,c=Math.floor(s/100),a=Math.floor((s-100*c)/10),f=s-100*c-10*a;if(l[i]){var d=c.toString(2)&r.toString(2);d.toString()!==r.toString(2)&&(t=!1,o="no permission",e(o)),e(null,t)}else if(u){for(var p in u)db.collection("group").findOne({_id:p},function(o,n){if(o)e(o);else if(n[i]){var s=a.toString(2)&r.toString(2);s.toString()!==r.toString(2)&&(t=!1,o="no permission",e(o))}});e(null,t)}else{var d=f.toString(2)&r.toString(2);d.toString()!==r.toString(2)&&(t=!1,o="no permission",e(o)),e(null,t)}})}})},exports.getPermission=function(o,n,i,r){var e={owner:{},group:{},mode:i||DEFAULT_PERMISSION.mode},t=[];if(o){var s=Array.isArray(o)?o:[o];s.forEach(function(o){e.owner[o]=1;var n={};n[o]=1,t.push(n)}),n?(n=Array.isArray(n)?n:[n],n.forEach(function(o){e.group[o]=1}),r(null,e)):db.collection(COLLECTION_LIST.group).find({$or:t},{_id:!0}).toArray(function(o,n){o?r(o):n?(n.forEach(function(o){console.log(o),e.group[o._id]=1}),r(null,e)):r(null,e)})}else r(null,DEFAULT_PERMISSION)},exports.insert=function(o,n,i,r,e){i=Array.isArray(i)?i:[i],i.forEach(function(i){i.permission?db.collection(o).insert(i,r,e):exports.getPermission(n,null,null,function(n,t){n?i.permission=DEFAULT_PERMISSION:(i.permission=t,db.collection(o).insert(i,r,e))})})},exports.remove=function(o,n,i,r,e){exports.validateUser(n,function(t){t?e(t):exports.validatePermission(o,i,n,OPERATION_CODE.remove,function(n){n?e(n):db.collection(o).remove(i,r,e)})})},exports.update=function(o,n,i,r,e,t){exports.validateUser(n,function(s){s?t(s):exports.validatePermission(o,i,n,OPERATION_CODE.update,function(n){n?t(n):db.collection(o).update(i,r,e,t)})})},exports.find=function(o,n,i,r,e,t){exports.validateUser(n,function(s){s?t(s):exports.validatePermission(o,i,n,OPERATION_CODE.find,function(n){n?t(n):db.collection(o).find(i,r,e,t)})})},exports.findOne=function(o,n,i,r){exports.validateUser(n,function(e){e?r(e):exports.validatePermission(o,i,n,OPERATION_CODE.find,function(n){n?r(n):db.collection(o).findOne(i,r)})})};