private static void ConfigAuthSession(BaseUser user, WeatherClientType clientType)
        {
            // clean all existing Cache
            //Mobizone.TSIC.Cache.DataCache.RemoveAllCacheBySession();

            var session       = SessionFactory.Create <IBLSessionPersisiter>();
            var clientSession = SessionFactory.Create <IClientSessionPersisiter>();

            session.RemoveSession();
            clientSession.RemoveSession();

            IBaseUserBL bl = BLLFactory.Create <IBaseUserBL>();

            session.UserID       = user.ID;
            session.BaseEmployee = user.BASE_EMPLOYEE;
            session.ProdType     = 1; //登录成功默认PND

            //var division = BLLFactory.Create<IBaseDictBL>().GetItemNameByCached(BaseDictType.DictTypeDivision,user.BaseEmployee.DIVISION);
            //if(division == BaseDictType.DivisionTypeMND) {
            //  session.ProdType = 2;
            //}

            clientSession.ClientType = clientType;

            //session.UserType = user.UserType;

            session.Roles = ExpendRole(bl.GetUserRoles(user.ID)); // load all the role

            //// Data Auth
            //var orgBL = BLLFactory.Create<IBaseOrgBL>();
            ISet <decimal> authOrg = new HashSet <decimal>();

            //var splitDate = DateTime.Parse("2012-03-07 03:00:00");
            //if(user.Updated == null || user.Updated < splitDate) {
            //  // 老式的ETMS授权
            //  authOrg = orgBL.FilterAbtCityOrgByCached(user.OrgAuth);
            //} else {
            //  authOrg = orgBL.ExpendOrgToAbtCityByCached(user.OrgAuth);
            //}
            //var userOrg = user.BaseEmployee.OrgID;
            //if(null != userOrg) {
            //  authOrg.Add(userOrg.Value);

            //  //展开到城市一级
            //  session.DataCenterCityAuth = orgBL.ExpendOrgToCenterCityByCached(userOrg.Value);
            //}

            //// Data Auth: PGS 自动授权 所有PG所在雅培城市
            //if(session.Roles.Contains(WeatherRole.PGM_PGS)) {
            //  var empBL = BLLFactory.Create<IBaseEmployeeBL>();
            //  var orgs = empBL.GetChildAbtCityBind(session.BaseEmployee.ID);
            //  authOrg.AddAll(orgs);
            //}

            session.DataOrgAuth = authOrg;
        }
        /*
         * public bool SetAuthSessionInWeb(string username, string password) {
         * var bl = BLLFactory.Create<IBaseUserBL>();
         * var user = bl.GetUserInWeb(username, password);
         * if (null == user) {
         *  return false;
         * }
         * ConfigAuthSession(user);
         * return true;
         * }
         *
         *
         * public bool SetAuthSessionInWap(string username, string password) {
         * var bl = BLLFactory.Create<IBaseUserBL>();
         * var user = bl.GetUserInWap(username, password);
         * if (null == user) {
         *  return false;
         * }
         * ConfigAuthSession(user);
         * return true;
         * }*/


        public bool SetAuthSession(string username, string password, WeatherClientType clientType, string[] loginOnlyIfRole = null, string[] extrRoles = null)
        {
            var bl   = BLLFactory.Create <IBaseUserBL>();
            var user = bl.GetUserInWeb(username, password);

            if (null == user)
            {
                return(false);
            }
            ConfigAuthSession(user, clientType);

            var session = SessionFactory.Create <IBLSessionPersisiter>();

            if (loginOnlyIfRole != null)
            {
                var identity = new WeatherIdentity(session.UserID);
                if (loginOnlyIfRole.All(role => !this.UserInRole(identity, role)))
                {
                    RemoveSession();
                    return(false);
                }
            }

            //string type = UserLog.LoginClientTypeWap;
            //switch (clientType) {
            //  case WeatherClientType.Wap:
            //    type = UserLog.LoginClientTypeWap;
            //    break;
            //  case WeatherClientType.Web:
            //    type = UserLog.LoginClientTypeWeb;
            //    break;
            //  case WeatherClientType.iPhone:
            //    type = UserLog.LoginClientTypeiPhone;
            //    break;
            //  case WeatherClientType.Android:
            //    type = UserLog.LoginClientTypeAndroid;
            //    break;
            //}

            if (extrRoles != null)
            {
                session.Roles.AddAll(extrRoles);
            }

            //Bus.ServiceBus.Publish(new Bus.Messages.LoginMsg() {
            //  EmpID = (int)session.BaseEmployee.ID,
            //  Time = Util.RPCNow,
            //  ClientType = type,
            //});

            return(true);
        }
        public bool SetAuthSession(int userID, WeatherClientType clientType = WeatherClientType.Wap, string[] extrRoles = null)
        {
            var bl   = BLLFactory.Create <IBaseUserBL>();
            var user = bl.GetUserByID(userID);

            if (null == user)
            {
                return(false);
            }
            ConfigAuthSession(user, clientType);
            if (extrRoles != null)
            {
                var session = SessionFactory.Create <IBLSessionPersisiter>();
                session.Roles.AddAll(extrRoles);
            }

            return(true);
        }