public async Task OnCommandClicked(CommandClickEventArgs <MyUserAdapterModel> args) { MyUserAdapterModel item = args.RowData as MyUserAdapterModel; if (args.CommandColumn.ButtonOption.IconCss == ButtonIdHelper.ButtonIdEdit) { CurrentRecord = item.Clone(); EditRecordDialogTitle = "修改紀錄"; IsShowEditRecord = true; isNewRecordMode = false; } else if (args.CommandColumn.ButtonOption.IconCss == ButtonIdHelper.ButtonIdDelete) { CurrentNeedDeleteRecord = item; #region 檢查關聯資料是否存在 var checkedResult = await CurrentService .BeforeDeleteCheckAsync(CurrentNeedDeleteRecord); await Task.Delay(100); if (checkedResult.Success == false) { MessageBox.Show("400px", "200px", "警告", ErrorMessageMappingHelper.Instance.GetErrorMessage(checkedResult.MessageId)); await Task.Yield(); thisRazorComponent.NeedRefresh(); return; } #endregion ConfirmMessageBox.Show("400px", "200px", "警告", "確認要刪除這筆紀錄嗎?"); } }
public async Task <string> CheckWetherCanChangePassword(MyUserAdapterModel myUserAdapterModel, string newPassword) { string result = ""; CleanTrackingHelper.Clean <SystemEnvironment>(context); CleanTrackingHelper.Clean <MyUserPasswordHistory>(context); SystemEnvironment systemEnvironment = await context.SystemEnvironment .OrderBy(x => x.Id) .FirstOrDefaultAsync(); string encodePassword = PasswordHelper.GetPasswordSHA(myUserAdapterModel.Salt, newPassword); if (encodePassword == myUserAdapterModel.Password) { result = "不可以變更成為現在正在使用的密碼"; } else { if (systemEnvironment.EnablePasswordHistory) { var history = await context.MyUserPasswordHistory .FirstOrDefaultAsync(x => x.MyUserId == myUserAdapterModel.Id && x.Password == encodePassword); if (history != null) { result = "不可以變更成為之前用過的密碼"; } } } return(result); }
public async Task <VerifyRecordResult> BeforeDeleteCheckAsync(MyUserAdapterModel paraObject) { if (paraObject.Account.ToLower() == MagicHelper.開發者帳號) { return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.開發者帳號不可以被刪除)); } CleanTrackingHelper.Clean <MyUser>(context); var searchItem = await context.MyUser .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == paraObject.Id); if (searchItem == null) { return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.無法刪除紀錄_要刪除的紀錄已經不存在資料庫上)); } searchItem = await context.MyUser .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == paraObject.Id); if (searchItem != null) { if (searchItem.Account.ToLower() == MagicHelper.開發者帳號) { return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.開發者帳號不可以被刪除)); } } else { return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.無法刪除紀錄_要刪除的紀錄已經不存在資料庫上)); } return(VerifyRecordResultFactory.Build(true)); }
public async Task <VerifyRecordResult> UpdateAsync(MyUserAdapterModel paraObject) { try { MyUser itemData = Mapper.Map <MyUser>(paraObject); CleanTrackingHelper.Clean <MyUser>(context); MyUser item = await context.MyUser .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == paraObject.Id); if (item == null) { return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.無法修改紀錄)); } else { CleanTrackingHelper.Clean <MyUser>(context); context.Entry(itemData).State = EntityState.Modified; await context.SaveChangesAsync(); CleanTrackingHelper.Clean <MyUser>(context); return(VerifyRecordResultFactory.Build(true)); } } catch (Exception ex) { Logger.LogError(ex, "修改記錄發生例外異常"); return(VerifyRecordResultFactory.Build(false, "修改記錄發生例外異常", ex)); } }
public async Task <VerifyRecordResult> BeforeAddCheckAsync(MyUserAdapterModel paraObject) { if (paraObject.Account.ToLower() == MagicHelper.開發者帳號) { return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.開發者帳號不可以被新增)); } var searchItem = await context.MyUser .AsNoTracking() .FirstOrDefaultAsync(x => x.Account == paraObject.Account); if (searchItem != null) { return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.要新增的紀錄已經存在無法新增)); } var searchMenuRoleItem = await context.MenuRole .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == paraObject.MenuRoleId); if (searchMenuRoleItem == null) { return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.沒有指定功能表角色項目)); } return(VerifyRecordResultFactory.Build(true)); }
string GenerateRefreshToken(MyUserAdapterModel user) { var claims = new[] { new Claim(ClaimTypes.NameIdentifier, user.Account), new Claim(ClaimTypes.Name, user.Name), new Claim(ClaimTypes.Sid, user.Id.ToString()), new Claim(ClaimTypes.Role, $"RefreshToken"), }; var token = new JwtSecurityToken ( issuer: tokenConfiguration.ValidIssuer, audience: tokenConfiguration.ValidAudience, claims: claims, expires: DateTime.Now.AddDays(tokenConfiguration.JwtRefreshExpireDays), //expires: DateTime.Now.AddMinutes(1), //notBefore: DateTime.Now.AddMinutes(-5), signingCredentials: new SigningCredentials(new SymmetricSecurityKey (Encoding.UTF8.GetBytes(tokenConfiguration.IssuerSigningKey)), SecurityAlgorithms.HmacSha512) ); string tokenString = new JwtSecurityTokenHandler().WriteToken(token); return(tokenString); }
string GenerateToken(MyUserAdapterModel user) { var claims = new List <Claim>() { new Claim(ClaimTypes.Role, "User"), new Claim(ClaimTypes.NameIdentifier, user.Account), new Claim(ClaimTypes.Name, user.Name), new Claim(ClaimTypes.Sid, user.Id.ToString()), }; if (user.IsManager == true) { claims.Add(new Claim(ClaimTypes.Role, "Administrator")); } var token = new JwtSecurityToken ( issuer: tokenConfiguration.ValidIssuer, audience: tokenConfiguration.ValidAudience, claims: claims, expires: DateTime.Now.AddMinutes(tokenConfiguration.JwtExpireMinutes), //notBefore: DateTime.Now.AddMinutes(-5), signingCredentials: new SigningCredentials(new SymmetricSecurityKey (Encoding.UTF8.GetBytes(tokenConfiguration.IssuerSigningKey)), SecurityAlgorithms.HmacSha512) ); string tokenString = new JwtSecurityTokenHandler().WriteToken(token); return(tokenString); }
public void OnPickerCompletion(MyUserAdapterModel e) { if (e != null) { CurrentRecord.ManagerId = e.Id; CurrentRecord.ManagerName = e.Name; } ShowAontherRecordPicker = false; }
public void OnPickerUserCompletion(MyUserAdapterModel e) { if (e != null) { CurrentRecord.EngineerId = e.Id; CurrentRecord.EngineerName = e.Name; } ShowUserPicker = false; }
public async Task <VerifyRecordResult> BeforeAddCheckAsync(MyUserAdapterModel paraObject) { var searchItem = await context.MyUser .AsNoTracking() .FirstOrDefaultAsync(x => x.Account == paraObject.Account); if (searchItem != null) { return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.要新增的紀錄已經存在無法新增)); } return(VerifyRecordResultFactory.Build(true)); }
public async Task DisableIt(MyUserAdapterModel item) { if (item.Account.ToLower() == MagicHelper.開發者帳號) { MessageBox.Show("400px", "200px", "警告", "開發者帳號不可以被停用", MessageBox.HiddenAsync); return; } await CurrentService.DisableIt(item); dataGrid.RefreshGrid(); }
public async Task <IActionResult> Put([FromRoute] int id, [FromBody] MyUserDto data) { APIResult apiResult; #region 驗證 DTO 物件的資料一致性 if (!ModelState.IsValid) { apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK, ErrorMessageEnum.傳送過來的資料有問題, payload: data); return(Ok(apiResult)); } #endregion var record = await myUserService.GetAsync(id); if (record != null && record.Id != 0) { MyUserAdapterModel recordTarget = mapper.Map <MyUserAdapterModel>(data); recordTarget.Id = id; var result = mapper.Map <MyUserDto>(recordTarget); #region 修改記錄前的紀錄完整性檢查 VerifyRecordResult verify = await myUserService.BeforeUpdateCheckAsync(record); if (verify.Success == false) { apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK, ErrorMessageMappingHelper.Instance.GetErrorMessage(verify.MessageId), payload: result); return(Ok(apiResult)); } #endregion var verifyRecordResult = await myUserService.UpdateAsync(recordTarget); if (verifyRecordResult.Success) { apiResult = APIResultFactory.Build(true, StatusCodes.Status202Accepted, ErrorMessageEnum.None, payload: null); } else { apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK, verifyRecordResult.MessageId, payload: result); } } else { apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK, ErrorMessageEnum.沒有任何符合資料存在, payload: data); } return(Ok(apiResult)); }
public async Task OnCommandClicked(CommandClickEventArgs <MyUserAdapterModel> args) { MyUserAdapterModel item = args.RowData as MyUserAdapterModel; if (args.CommandColumn.ButtonOption.IconCss == ButtonIdHelper.ButtonIdEdit) { CurrentRecord = item.Clone(); EditRecordDialogTitle = "修改紀錄"; IsShowEditRecord = true; isNewRecordMode = false; } else if (args.CommandColumn.ButtonOption.IconCss == ButtonIdHelper.ButtonIdDelete) { CurrentNeedDeleteRecord = item; #region 檢查關聯資料是否存在 var checkedResult = await CurrentService .BeforeDeleteCheckAsync(CurrentNeedDeleteRecord); await Task.Delay(100); if (checkedResult.Success == false) { MessageBox.Show("400px", "200px", "警告", ErrorMessageMappingHelper.Instance.GetErrorMessage(checkedResult.MessageId), MessageBox.HiddenAsync); await Task.Yield(); await thisView.NeedRefreshAsync(); return; } #endregion #region 刪除這筆紀錄 await Task.Yield(); var checkTask = ConfirmMessageBox.ShowAsync("400px", "200px", "警告", "確認要刪除這筆紀錄嗎?", ConfirmMessageBox.HiddenAsync); await thisView.NeedRefreshAsync(); var checkAgain = await checkTask; if (checkAgain == true) { var verifyRecordResult = await CurrentService.DeleteAsync(CurrentNeedDeleteRecord.Id); await TranscationResultHelper.CheckDatabaseResult(MessageBox, verifyRecordResult); dataGrid.RefreshGrid(); } #endregion } }
public async Task <VerifyRecordResult> AddAsync(MyUserAdapterModel paraObject) { MyUser itemParameter = Mapper.Map <MyUser>(paraObject); CleanTrackingHelper.Clean <MyUser>(context); await context.MyUser .AddAsync(itemParameter); await context.SaveChangesAsync(); CleanTrackingHelper.Clean <MyUser>(context); return(VerifyRecordResultFactory.Build(true)); }
public async Task ChangePassword(MyUserAdapterModel myUserAdapterModel, string newPassword) { string encodePassword = PasswordHelper.GetPasswordSHA(myUserAdapterModel.Salt, newPassword); myUserAdapterModel.Password = encodePassword; var myUser = Mapper.Map <MyUser>(myUserAdapterModel); CleanTrackingHelper.Clean <MyUser>(context); context.Entry(myUser).State = EntityState.Modified; await context.SaveChangesAsync(); CleanTrackingHelper.Clean <MyUser>(context); }
public async Task <IActionResult> Post([FromBody] MyUserDto data) { APIResult apiResult; #region 驗證 DTO 物件的資料一致性 if (!ModelState.IsValid) { apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK, ErrorMessageEnum.傳送過來的資料有問題, payload: data); return(Ok(apiResult)); } #endregion MyUserAdapterModel record = mapper.Map <MyUserAdapterModel>(data); if (record != null) { var result = mapper.Map <MyUserDto>(record); #region 新增記錄前的紀錄完整性檢查 VerifyRecordResult verify = await myUserService.BeforeAddCheckAsync(record); if (verify.Success == false) { apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK, ErrorMessageMappingHelper.Instance.GetErrorMessage(verify.MessageId), payload: result); return(Ok(apiResult)); } #endregion var verifyRecordResult = await myUserService.AddAsync(record); if (verifyRecordResult.Success) { apiResult = APIResultFactory.Build(true, StatusCodes.Status200OK, ErrorMessageEnum.None, payload: null); } else { apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK, verifyRecordResult.MessageId, payload: result); } } else { apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK, ErrorMessageEnum.傳送過來的資料有問題, payload: data); } return(Ok(apiResult)); }
public async Task OnSaveAsync() { Relogin = false; MyUserAdapterModel myUserAdapterModel = new MyUserAdapterModel(); #region 進行 Form Validation 檢查驗證作業 if (LocalEditContext.Validate() == false) { return; } #endregion #region 其他資料完整性驗證 if (ChangePasswordModel.NewPasswordAgain != ChangePasswordModel.NewPassword) { MessageBox.Show("400px", "200px", ErrorMessageMappingHelper.Instance.GetErrorMessage(ErrorMessageEnum.警告), ErrorMessageMappingHelper.Instance.GetErrorMessage(ErrorMessageEnum.新密碼2次輸入須相同), CloseMessageBox); return; } else { myUserAdapterModel = await ChangePasswordService.GetCurrentUser(); if (myUserAdapterModel == null) { MessageBox.Show("400px", "200px", ErrorMessageMappingHelper.Instance.GetErrorMessage(ErrorMessageEnum.警告), ErrorMessageMappingHelper.Instance.GetErrorMessage(ErrorMessageEnum.使用者不存在), CloseMessageBox); return; } } #endregion #region 進行密碼變更 await ChangePasswordService.ChangePassword(myUserAdapterModel, ChangePasswordModel.NewPassword, HttpContextAccessor.GetConnectionIP()); Relogin = true; MessageBox.Show("400px", "200px", ErrorMessageMappingHelper.Instance.GetErrorMessage(ErrorMessageEnum.警告), ErrorMessageMappingHelper.Instance.GetErrorMessage(ErrorMessageEnum.密碼已經變更成功), CloseMessageBox); #endregion }
public void ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) { if (args.Item.Id == ButtonIdHelper.ButtonIdAdd) { CurrentRecord = new MyUserAdapterModel(); #region 針對新增的紀錄所要做的初始值設定商業邏輯 #endregion EditRecordDialogTitle = "新增紀錄"; isNewRecordMode = true; IsShowEditRecord = true; } else if (args.Item.Id == ButtonIdHelper.ButtonIdRefresh) { dataGrid.RefreshGrid(); } }
public async Task AddHistoryRecord(MyUserAdapterModel myUserAdapterModel, FlowMasterAdapterModel flowMasterAdapterModel, string Summary, string Comment, bool approve) { FlowHistory history = new FlowHistory() { Comment = Comment, Summary = Summary, Updatetime = DateTime.Now, FlowMasterId = flowMasterAdapterModel.Id, MyUserId = myUserAdapterModel.Id, Approve = approve, }; await context.FlowHistory.AddAsync(history); await context.SaveChangesAsync(); }
public void OnPickerCompletion(MyUserAdapterModel e) { if (e != null) { if (UserMode == MagicHelper.MyUserUserMode) { CurrentRecord.MyUserId = e.Id; CurrentRecord.MyUserName = e.Name; } else { CurrentRecord.AgentId = e.Id; CurrentRecord.AgentName = e.Name; } } ShowAontherRecordPicker = false; }
public async Task <VerifyRecordResult> BeforeUpdateCheckAsync(MyUserAdapterModel paraObject) { //if (paraObject.Account.ToLower() == MagicHelper.開發者帳號) //{ // return VerifyRecordResultFactory.Build(false, ErrorMessageEnum.開發者帳號不可以被修改); //} CleanTrackingHelper.Clean <MyUser>(context); var searchItem = await context.MyUser .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == paraObject.Id); if (searchItem == null) { return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.要更新的紀錄_發生同時存取衝突_已經不存在資料庫上)); } searchItem = await context.MyUser .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == paraObject.Id); if (searchItem != null) { //if (searchItem.Account.ToLower() == MagicHelper.開發者帳號) //{ // return VerifyRecordResultFactory.Build(false, ErrorMessageEnum.開發者帳號不可以被修改); //} } else { return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.要更新的紀錄_發生同時存取衝突_已經不存在資料庫上)); } searchItem = await context.MyUser .AsNoTracking() .FirstOrDefaultAsync(x => x.Account == paraObject.Account && x.Id != paraObject.Id); if (searchItem != null) { return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.要修改的紀錄已經存在無法修改)); } return(VerifyRecordResultFactory.Build(true)); }
async Task OhterDependencyData(MyUserAdapterModel data) { if (data.IsManager == true) { data.IsManagerString = "是"; } else { data.IsManagerString = "否"; } var user = await context.MyUser .FirstOrDefaultAsync(x => x.Id == data.ManagerId); if (user != null) { data.ManagerName = user.Name; } }
public async Task <(MyUserAdapterModel, string)> CheckUser(string account, string password) { MyUser user = await context.MyUser.AsNoTracking().FirstOrDefaultAsync(x => x.Account == account); if (user == null) { return(null, ErrorMessageMappingHelper.Instance .GetErrorMessage(ErrorMessageEnum.使用者帳號不存在)); } if (user.Password != password) { return(null, ErrorMessageMappingHelper.Instance .GetErrorMessage(ErrorMessageEnum.密碼不正確)); } MyUserAdapterModel userAdapterModel = Mapper.Map <MyUserAdapterModel>(user); return(userAdapterModel, ""); }
public void OnPickerSimulatorUserCompletion(MyUserAdapterModel e) { if (e != null) { CurrentUserHelper.CustomUserId = e.Id; CurrentUserHelper.CustomUserName = e.Name; CurrentUser.CurrentMyUserId = e.Id; CurrentUser.SimulatorMyUserAdapterModel = e; dataGrid.RefreshGrid(); } else { CurrentUserHelper.CustomUserId = 0; CurrentUserHelper.CustomUserName = ""; CurrentUser.CurrentMyUserId = 0; CurrentUser.SimulatorMyUserAdapterModel = null; } ShowSimulatorUserPicker = false; }
public async Task <MyUserAdapterModel> GetAsync(int id) { MyUser item = await context.MyUser .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == id); if (item != null) { MyUserAdapterModel result = Mapper.Map <MyUserAdapterModel>(item); await OhterDependencyData(result); return(result); } else { return(new MyUserAdapterModel()); } }
public async Task <VerifyRecordResult> AddAsync(MyUserAdapterModel paraObject) { try { MyUser itemParameter = Mapper.Map <MyUser>(paraObject); CleanTrackingHelper.Clean <MyUser>(context); await context.MyUser .AddAsync(itemParameter); await context.SaveChangesAsync(); CleanTrackingHelper.Clean <MyUser>(context); return(VerifyRecordResultFactory.Build(true)); } catch (Exception ex) { Logger.LogError(ex, "新增記錄發生例外異常"); return(VerifyRecordResultFactory.Build(false, "新增記錄發生例外異常", ex)); } }
public async Task EnableIt(MyUserAdapterModel paraObject) { MyUser itemData = Mapper.Map <MyUser>(paraObject); CleanTrackingHelper.Clean <MyUser>(context); MyUser item = await context.MyUser .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == paraObject.Id); if (item == null) { } else { item.Status = true; context.Entry(item).State = EntityState.Modified; await context.SaveChangesAsync(); CleanTrackingHelper.Clean <MenuData>(context); } }
public async Task AddInboxRecord(FlowMasterAdapterModel paraObject, MyUserAdapterModel myUser, bool isCC) { string CCMessage = isCC ? "[知會]" : ""; CleanTrackingHelper.Clean <FlowInbox>(context); FlowInbox inbox = new FlowInbox() { FlowMasterId = paraObject.Id, MyUserId = myUser.Id, IsRead = false, ReceiveTime = DateTime.Now, Title = $"{CCMessage} {paraObject.Title}", Body = paraObject.Content, }; await context.FlowInbox.AddAsync(inbox); await context.SaveChangesAsync(); CleanTrackingHelper.Clean <FlowInbox>(context); }
public bool CheckCurrentActionUser(List <FlowUser> flowUsers, MyUserAdapterModel myUserAdapterModel, FlowMasterAdapterModel flowMasterAdapterModel) { var flowUserCurrent = flowUsers.Where(x => x.Level == flowMasterAdapterModel.ProcessLevel && x.OnlyCC == false && x.Completion == false).ToList(); if (flowUserCurrent.Count() == 0) { return(false);; } else { var findUser = flowUserCurrent.FirstOrDefault(x => x.MyUserId == myUserAdapterModel.Id); if (findUser == null) { return(false); } else { return(true); } } }
public void ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) { if (args.Item.Id == ButtonIdHelper.ButtonIdAdd) { CurrentRecord = new MyUserAdapterModel(); #region 針對新增的紀錄所要做的初始值設定商業邏輯 CurrentRecord.Status = true; #endregion EditRecordDialogTitle = "新增紀錄"; isNewRecordMode = true; IsShowEditRecord = true; CurrentRecord.ForceLogoutDatetime = DateTime.Now; CurrentRecord.ForceChangePassword = true; CurrentRecord.ForceChangePasswordDatetime = DateTime.Now; CurrentRecord.LoginFailUnlockDatetime = DateTime.Now; CurrentRecord.LoginFailTimes = 0; CurrentRecord.LastLoginDatetime = DateTime.Now; } else if (args.Item.Id == ButtonIdHelper.ButtonIdRefresh) { dataGrid.RefreshGrid(); } }