public void ChangePass(UserModel model)
        {
            db = new TimeAttendanceEntities();

            var modelChange = db.User.Where(r => r.UserId.Equals(model.UserId)).FirstOrDefault();

            //Kiểm tra tồn tại
            if (modelChange == null)
            {
                throw new BusinessException(ErrorMessage.ERR003);
            }

            //Check mật khẩu cũ nhập
            var securityStamp = PasswordUtil.ComputeHash(model.OldPassword + modelChange.Password);

            if (!modelChange.PasswordHash.Equals(securityStamp))
            {
                throw new BusinessException(ErrorMessage.ERR007);
            }
            using (var trans = db.Database.BeginTransaction())
            {
                try
                {
                    modelChange.PasswordHash = PasswordUtil.ComputeHash(model.NewPassword + modelChange.Password);

                    //luu Log lich su
                    string decription = "Thay đổi mật khẩu cá nhân";
                    LogBusiness.SaveLogEvent(db, model.UserId, decription, null);

                    db.SaveChanges();
                    trans.Commit();
                    //xóa cache
                    var redis = RedisService <LoginCacheModel> .GetInstance(RedisConnection);

                    LoginCacheModel RefreshToken;
                    RefreshToken = redis.Get <LoginCacheModel>(Constants.ATLogin + modelChange.Name);
                    if (RefreshToken != null)
                    {
                        redis.Remove(Constants.ATLogin + modelChange.Name);
                    }
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw new ErrorException(ErrorMessage.ERR001, ex.InnerException);
                }
            }
        }
        public void ResetPass(string userId)
        {
            db = new TimeAttendanceEntities();

            using (var trans = db.Database.BeginTransaction())
            {
                try
                {
                    var modelReset = db.User.Where(r => r.UserId.Equals(userId)).FirstOrDefault();
                    var name       = string.Empty;
                    if (modelReset != null)
                    {
                        modelReset.Password     = PasswordUtil.CreatePasswordHash();
                        modelReset.PasswordHash = PasswordUtil.ComputeHash(Constants.PasswordDefault + modelReset.Password);
                        name = modelReset.Name;
                    }

                    db.SaveChanges();
                    trans.Commit();

                    //luu Log lich su
                    string decription = "Lấy lại mật khẩu của user tên là: " + name;
                    LogBusiness.SaveLogEvent(db, userId, decription, null);
                    //xóa cache
                    // var RedisConnection = System.Configuration.ConfigurationManager.AppSettings["RedisConnection"];

                    var redis = RedisService <LoginCacheModel> .GetInstance(RedisConnection);

                    LoginCacheModel RefreshToken;
                    RefreshToken = redis.Get <LoginCacheModel>(Constants.ATLogin + modelReset.Name);
                    if (RefreshToken != null)
                    {
                        redis.Remove(Constants.ATLogin + modelReset.Name);
                    }
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw new ErrorException(ErrorMessage.ERR001, ex.InnerException);
                }
            }
        }
        public void CreateUser(UserModel model)
        {
            db = new TimeAttendanceEntities();
            if (this.IsExistedUser(model.Name))
            {
                throw new BusinessException(ErrorMessage.ERR002);
            }
            using (var trans = db.Database.BeginTransaction())
            {
                try
                {
                    User modelCreate = new User()
                    {
                        UserId      = Guid.NewGuid().ToString(),
                        Name        = model.Name,
                        FullName    = model.FullName,
                        BirthDay    = model.BirthDay,
                        Agency      = model.Agency,
                        Email       = model.Email,
                        UnitId      = model.UnitId,
                        Role        = model.Role,
                        Type        = model.Type,
                        PhoneNumber = model.PhoneNumber,
                        Address     = model.Address,
                        Status      = Constants.UnLock,
                        Description = model.Description,
                        ImageLink   = model.ImageLink,
                        CreateBy    = model.CreateBy,
                        CreateDate  = DateTime.Now,
                    };
                    modelCreate.Password     = PasswordUtil.CreatePasswordHash();
                    modelCreate.PasswordHash = PasswordUtil.ComputeHash(Constants.PasswordDefault + modelCreate.Password);

                    db.User.Add(modelCreate);

                    if (!string.IsNullOrEmpty(model.GroupId))
                    {
                        UserGroup userGroup = new UserGroup()
                        {
                            UserGroupId = Guid.NewGuid().ToString(),
                            GroupId     = model.GroupId,
                            UserId      = modelCreate.UserId,
                        };
                        db.UserGroup.Add(userGroup);
                    }

                    //Thêm dánh sách quyền cho tài khoản
                    List <UserPermission> listPermission = new List <UserPermission>();
                    UserPermission        modelPermission;
                    if (model.ListPermission != null && model.ListPermission.Count() > 0)
                    {
                        foreach (var item in model.ListPermission)
                        {
                            modelPermission = new UserPermission()
                            {
                                UserPermissionId = Guid.NewGuid().ToString(),
                                UserId           = modelCreate.UserId,
                                FunctionId       = item.FunctionId,
                            };
                            listPermission.Add(modelPermission);
                        }
                        db.UserPermission.AddRange(listPermission);
                    }

                    //luu Log lich su
                    string decription = "Thêm mới có tên là: " + model.Name;
                    LogBusiness.SaveLogEvent(db, model.LogUserId, decription, model.ViolationEventId);

                    db.SaveChanges();
                    trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw new ErrorException(ErrorMessage.ERR001, ex.InnerException);
                }
            }
        }
        public LoginEntity Login(string userName, string password)
        {
            db = new TimeAttendanceEntities();
            LoginEntity loginEntity = new LoginEntity();

            try
            {
                var userLogin = (from a in db.User.AsNoTracking()
                                 where a.Name.Equals(userName) && a.DeleteFlg == 0
                                 //join b in db.UserGroups.AsNoTracking() on a.UserId equals b.UserId into ab
                                 //from abv in ab.DefaultIfEmpty()
                                 select new
                {
                    a.UserId,
                    // a.UnitId,
                    a.Name,
                    a.FullName,
                    a.BirthDay,
                    // a.Agency,
                    a.Email,
                    a.Role,
                    a.PhoneNumber,
                    a.Password,
                    a.PasswordHash,
                    a.Status,
                    a.Type,
                    a.Description,
                    a.ImageLink,
                    a.CreateBy,
                    a.CreateDate,
                    a.UpdateBy,
                    a.UpdateDate,
                    a.IsAdmin,
                    //abv.GroupId,
                }).FirstOrDefault();
                if (userLogin != null)
                {
                    if (userLogin.Status == Constants.Lock)
                    {
                        //Tài khoản bị khóa. Lên hệ quản trị để kích hoạt lại
                        loginEntity.ResponseCode = -6;
                    }
                    else
                    {
                        var securityStamp = PasswordUtil.ComputeHash(password + userLogin.Password);
                        if (userLogin.PasswordHash.Equals(securityStamp))
                        {
                            UserEntity userEntity = new UserEntity()
                            {
                                UserName = userLogin.Name,
                                UserId   = userLogin.UserId,
                                FullName = userLogin.FullName,
                                Role     = "1",
                                //UnitId = userLogin.UnitId,
                                //GroupId = userLogin.GroupId,
                                ImageLink = userLogin.ImageLink,
                                //Agency = userLogin.Agency,
                                Type        = userLogin.Type,
                                IsAdmin     = userLogin.IsAdmin.ToString(),
                                securityKey = PasswordUtil.CreatePasswordHash(),
                            };
                            userEntity.ListPermission = new List <string>();
                            userEntity.ListPermission = (from c in db.UserPermission.AsNoTracking()
                                                         where c.UserId.Equals(userLogin.UserId)
                                                         join d in db.Function.AsNoTracking() on c.FunctionId equals d.FunctionId
                                                         select d.Code).ToList <string>();

                            userEntity.HomePage = (from r in db.Group.AsNoTracking()
                                                   join a in db.UserGroup on r.GroupId equals a.GroupId
                                                   where a.UserId.Equals(userEntity.UserId)
                                                   select r.HomePage).FirstOrDefault();

                            loginEntity.UserInfor = userEntity;

                            LogBusiness.SaveLogLogin(db, userEntity.UserId);
                        }
                        else
                        {
                            // Mật khẩu không đúng
                            loginEntity.ResponseCode = -5;
                        }
                    }
                }
                else
                {
                    // tài khoản không có trong hệ thống
                    loginEntity.ResponseCode = -4;
                }
            }
            catch (Exception e)
            {
                Console.Write(e.ToString());
            }

            return(loginEntity);
        }