auth.js 4.57 KB
var oldService = require('./oldService');
var request = require('request');
var util = require('../../util/common');
var _ = require('lodash');

var WEBSITE = 1;//1表示平台端,2表示商户端 

/**
 * 登陆异常信息
 * @type {Object}
 */
var errorMessage = {
        code:50003,
        message:"登录失败"
};

/**
 * 登陆调用,返回菜单项和用户信息
 * @param  {String}   user     用户名
 * @param  {String}   password 密码
 * @param  {Object} res 返回对象
 * @return {void}
 */
 exports.callLogin = function(user,password,res) {
    util.setLogger(res.app.logger);
    var options = {
        url:oldService.login,
        form:'["'+user+'","'+password+'",1]'//'["zhiyuan","lzy111111",1]'//
    }

    //调用登陆
    util.httpCall(options,function(err,ret){
        if(err) {
          res.json(errorMessage);
          return;
        } else {
          console.log(ret);
           //调用菜单
           _callGetMenu(ret.data.pid,ret.data.role_id,function(err,data){
              if(err) {
                res.json(errorMessage);
              } else {
                var userData = ret.data?ret.data:{};
                var userInfo = {
                    auth:userData,
                    menu:data.menu,
                    noRight:data.noRight
                }
                userInfo.auth.uid = userData.pid;
                userInfo.auth.name = userData.truename;
                res.json({
                  code:20003,
                  data:userInfo
                });
              }
           });
        }
    });
}

/**
 * 根据pid获取菜单权限
 * @param  {Number}   pid     操作员ID
 * @param  {Function} callback 回调
 */
function _callGetMenu(pid,roleid,callback) {
    var options = {
        url:oldService.getResourceByPid,
        form:'['+pid+','+roleid+',1]'
    }
console.log(options);
    util.httpCall(options,function(err,ret){
        if(err) {
          callback(err);
        } else {
          var menuData  = {menu:[],right:{}};
          if(ret.data) {
            menuData = _makeMenu(ret.data);
          }
          _getAllMenu(function(ret){
            filterRight(ret,menuData);
            menuData.noRight = filterRight(ret,menuData);
            delete menuData.right;
            callback(null,menuData);
          });
          
        }    
    });
}

/**
 * 筛选出没有的权限
 * @param  {[type]} ret [description]
 * @param {Object} menuData [description]
 * @return {[type]}     [description]
 */
function filterRight(ret,menuData) {
  var noRight = {};
  //匹配没有权限
  for(var key in ret){
    var item=ret[key];
    for(var i in item.sub){
      var v=item.sub[i];
      if(v.menu_url!=='') {
        if(!menuData.right[v.menu_url]) {
          noRight[v.menu_url] = true;
        }
      }
    }
  }
  return noRight;
}

/**
 * 获取全部菜单
 * @param  {Function} callback 结果回调
 */
function _getAllMenu (callback) {
  var options = {
    url:oldService.getAllResByWebsite+'?website='+WEBSITE+'&sort=',
    form:'['+WEBSITE+']'
  }

  util.httpCall(options,function(err,ret){
    if(err) {
      callback({});
    } else {
      callback(ret.data);
    }
  })
}


/**
 * 组装菜单
 * @param  {Array} data 菜单数据
 */
function _makeMenu (data) {
    var menu = [];
    var right = {};
    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'
                }
                right[val.menu_url] = true;
                itemSubs.push(sub);
            });

            item.menu = itemSubs;
        }
        menu.push(item);
    }
    // _.forEach(data,function(v){
    //     var item = {
    //         title:v.menu_name,
    //     }
    //     if(v.parent_id === "0") {
    //         item.parent = 'menu-template';
    //         var itemSubs = [];
    //         _.forEach(v.sub,function(val) {
    //           console.log(v.sub);
    //             var sub = {
    //                 title:val.menu_name,
    //                 href:val.menu_url,
    //                 icon: 'list-alt'
    //             }
    //             right[val.menu_url] = true;
    //             itemSubs.push(sub);
    //         });

    //         item.menu = itemSubs;
    //     }
    //     menu.push(item);
    // });

    return {
      menu:menu,
      right:right
    };
}