kpiplus
Version:
KPI+
1 lines • 4.48 kB
JavaScript
;var right=require("../models/right"),App=require("../models/app"),usergroup=require("../models/usergroup"),stp=require("stp-utils"),underscore=require("underscore"),lock=require("../models/lock"),trangthai=require("../models/trangthai"),async=require("async");exports.checkUseTime=function(t){return!0},exports.isAdmin=function(t,e,n){if(!t)return n(null,!0);App.findOne({_id:t}).lean().exec(function(t,r){if(t)return n(t,!1);if(!r)return n("Công ty này không tồn tại",!1);if(stp.isSupperAdmin(e.toLowerCase()))return n(null,!0,r);if(r.user_created==e)return n(null,!0,r);if(!r.participants)return n("Bạn không có quyền truy cập công ty này",!1,r);var i=underscore.find(r.participants,function(t){return t.email==e});if(!i)return n("Bạn không có quyền truy cập công ty này",!1,r);n(null,i.admin,r)})},exports.hasRight=function(t,e,n,r,i,a){if(a||(a={}),!t)return i(null,!0);exports.isAdmin(t,e,function(o,u,s){if(o)return i(o,!1);if(a.data&&a.data.id_app){if(a.data.id_app!=t)return i("Bạn không thể truy cập đối tượng này",!1);if(a.obj&&a.data.id_app!=a.obj.id_app)return i("Bạn không thể cập nhật đối tượng này",!1)}if(a.obj&&a.obj.id_app&&a.obj.id_app!=t)return i("Bạn không thể truy cập đối tượng này",!1);if(a.notNeedRight||!modulesInMenu[n])return i(null,!0);if(a.obj&&(!u||"task"==n.toLowerCase()))if(2===a.obj.visible_to){if(!underscore.contains(a.obj.visible_to_users,e)&&a.obj.user_created.toLowerCase()!==e.toLowerCase())return i("Bạn không có quyền truy cập đối tượng này",!1)}else if(1===a.obj.visible_to&&a.obj.user_created&&a.obj.user_created.toLowerCase()!==e.toLowerCase())return i("Bạn không có quyền truy cập đối tượng này",!1);r=r.toLowerCase();let c=e,l=s.participants.find(t=>t.email===e);l&&l.group_id&&(c=l.group_id.toLowerCase()),right.findOne({id_app:t,email:c,module:n.toLowerCase()},function(n,o){if(n)return i(n,!1);if(!u){if(!o||!o[r])return i("Bạn không có quyền đối với tính năng này",!1);if(a.obj&&o&&!o.viewOfOther&&a.obj.user_created.toLowerCase()!==e.toLowerCase()&&(2!==a.obj.visible_to||!underscore.contains(a.obj.visible_to_users,e)))return i("Bạn không có quyền truy cập đối tượng này",!1);a.data&&(a.data.trang_thai||0==a.data.trang_thai)&&(a.data.trang_thai=a.data.trang_thai.toString()),a.obj&&(a.obj.trang_thai||0==a.obj.trang_thai)&&(a.obj.trang_thai=a.obj.trang_thai.toString());let t=a.data||a.obj;if(t&&t.trang_thai&&o.trang_thai&&!1===o.trang_thai[t.trang_thai.toUpperCase()])return i("Bạn không có quyền đối với trạng thái chứng từ này")}a.obj?async.parallel({lock:e=>{lock.findOne({id_app:t,id_ct:a.obj._id},function(t,n){n?e("Chứng từ này đã được khoá"):e()})},trangthai:t=>{a.obj&&("update"===r||"delete"===r)&&a.obj.ma_ct?trangthai.findOne({ma_ct:a.obj.ma_ct.toUpperCase(),ma_trang_thai:a.obj.trang_thai},function(e,n){if(e)return t(e);if(n){if("update"===r){if(0==n.allow_update)return t("Trạng thái chứng từ này không cho phép sửa");if(1==n.lock_data)return t("Trạng thái chứng từ này đã được khoá")}if("delete"===r&&0==n.allow_delete)return t("Trạng thái chứng từ này không cho phép xoá")}return t()}):t()}},(t,e)=>{t?i(t,!1):i(null,!0,s)}):i(null,!0,s)})})},exports.getRightByItem=function(t,e,n,r){exports.isAdmin(t,n,function(i,a,o){if(i)return r(i);let u={},s=e&&e.collection&&e.collection.name&&e.collection.name.length>1?e.collection.name.substr(0,e.collection.name.length-1).toLowerCase():"";if(a&&"task"!==s)r(null,u,a);else{let i,a,c,l;!0===underscore.has(e.schema.paths,"visible_to")&&(u.$and||(u.$and=[]),c={visible_to:2,$or:[{user_created:n},{visible_to_users:n}]},l={visible_to:1,user_created:n},(i=[{visible_to:null}]).push(a={visible_to:0}),i.push(l),i.push(c),u.$and.push({$or:i}));let d=n,p=o.participants.find(t=>t.email===n);p&&p.group_id&&(d=p.group_id.toLowerCase()),right.findOne({id_app:t,email:d,module:s},function(t,e){e&&!1===e.viewOfOther&&(a?a.user_created=n:u.user_created=n),r(null,u,!1)})}})},exports.getRightDataView=function(t,e,n,r){exports.isAdmin(t,n,function(t,i,a){if(t)return r(t);let o={};if(!i&&!0===underscore.has(e.schema.paths,"dataview_to_users")){o.$and||(o.$and=[]);let t=[{dataview_to:null}];t.push({dataview_to:0}),t.push({dataview_to:1,user_created:n}),t.push({dataview_to:2,$or:[{user_created:n},{dataview_to_users:n}]}),o.$and.push({$or:t})}r(null,o,i)})};