login.js 6.6 KB
var request = require('request');
var _ = require('lodash');
var fs = require('fs');

var Iaccount = global.Register.system;

var Utils = {
    createrMenus: function (data) {
        var menu = [];
        for (var key in data) {
            
            var v = data[key];
            var item = {
                title: v.menu_name,
            }
            if (v.parent_id === "0") {
                item.parent = 'menu-template';
                var itemSubs = [];
                _.forEach(v.sub, function (val) {
                    var sub = {
                        title: val.menu_name,
                        href: val.menu_url,
                        icon: 'list-alt'
                    }
                    itemSubs.push(sub);
                });
                
                item.menu = itemSubs;
            }
            menu.push(item);
        }
        return menu;
    }
}

module.exports = {
    namespace: "common",
    apis: {
        Ilogin: {
            title:'登录接口',
            url: Iaccount.login,
            form: '["{{user}}","{{password}}",{{website}}]',
            params: {
                user: { type: String },
                password: { type: String },
                website: {type:Number,default: Iaccount.WEBSITE}
            }
        },
        getResourceByPid: {
            title:'菜单接口',
            url: Iaccount.getResourceByPid,
            form: '[{{pid}},{{role_id}},{{website}}]',
            params: {
                pid: { type: Number },
                role_id: { type: Number },
                website: { type: Number, default: Iaccount.WEBSITE }
            }
        },
        allRight: {
            title: '获取权限',
            url: Iaccount.allRight,
            form: '[false]'
        },
        sessionAsync: {
            title:'与老系统session同步',
            url: Iaccount.url + '/account/login/sessions',
            outobj: "response",
            form: {'account':'{{user}}','password':'{{password}}','refer': '{{refer}}'},
            params: {
                user: { type: String },
                password: { type: String },
                refer:{type:String,default:'%2Faccount%2Fprofile%2Fdisplay'}
            }
        },
        login: function (req, callback, common) {

            console.log("enter login method ........................................");

            var userInfo = {},result = { code: 400, message: "登录失败" },isSuccess=false;
            

            var user = req.body.user||req.query.user;
            var password = req.body.password||req.query.password;
            var errcallback = function (err) { 

                 console.log("enter login method ........................................&&&&&&&&&&&&&&&&&&&&&&&" + err);

                return callback(null, result);
            }

             console.log("enter login method ........................................************");

            common.Ilogin(user, password).allRight().sessionAsync(user, password).done(function (IloginRes,allRes,sesRes) {
                var userData = IloginRes.data, cookie = sesRes.caseless.dict["set-cookie"];

                console.log("enter userData is  ........................................" + userData);


                userInfo = { auth: userData, uid: userData.pid, name: userData.truename, role: userData.roleName, right: {},shopList:[],brands:[]};
                if(userData.data_authority&&userData.data_authority.brand&&userData.data_authority.brand.list){
                    userInfo.brands=userData.data_authority.brand.is_all?"0":Object.keys(userData.data_authority.brand.list);
                }
                allRes.data.forEach(function (data) {
                    if (data.platform_id == Iaccount.WEBSITE) {
                        userInfo.right[data.path] = true;
                    }
                });
                common.getResourceByPid(userData.pid, userData.role_id).done(function (getRRes) {
                    userInfo.menu = Utils.createrMenus(getRRes.data);
                    req.session.user = userInfo;
                    if (cookie && cookie.length > 0) {
                        req.session.gray = cookie[0];
                        result = { code: 200, message: "登录成功" ,data:req.session.user};
                    }
                    return callback(null, result);
                },errcallback);
            }, errcallback);
        },
        isUsedMenuAuth:{
            title:'检查有没有权限',
            url:Iaccount.isUsedMenuAuth,
            form:'[{{pid}},{{role_id}},"{{path}}","","",' + Iaccount.WEBSITE + ']',
            params:{
                pid:{type:Number},
                role_id:{type:Number},
                path:{type:String}
            }
        },
        gray: function (req, callback,common) {
            var result = { code: 201, message: "没有权限" };
            console.log("enter gray filter...");
            if (req.session && req.session.user) {
                var user = req.session.user;
                var path = req.route?req.route.path[0]:req.originalUrl.replace(/\?.+/, '');
                console.log("enter gray filter, user: " + user + ", path: " + path);
                req._yoheaders = {
                    'x-user-id': user.auth.pid,
                    'x-user-name': user.auth.account,//防止header中包含中文
                    'x-site-type': Iaccount.WEBSITE,
                    'x-client-ip': req.ip,
                    'x-user-brands':typeof user.brands==="string"?user.brands: user.brands.join(',')
                };
                if (path && user.right[path]) {
                    common.isUsedMenuAuth(user.auth.pid,user.auth.role_id,path).done(function(isURes){
                        result = { code: 200, message: "具有权限" };
                        if(isURes.data){
                            result={code:isURes.data.code,message:isURes.data.errmsg};
                        }
                        console.log("return result: " + JSON.stringify(isURes));
                        console.log("code 200, result: " + JSON.stringify(result));
                        return callback(null, result);
                    },function(error){
                        console.log("error: " + error);
                        return callback(error, result);
                    });
                } else {
                    result = { code: 200, message: "不受权限控制" };
                    console.log(result);
                    return callback(null, result);
                }
            } else {
                console.log("no session..");
                return callback(null, result);
            }
        }
    }
}