public static dynamic ToDynamic(Leadtools.Medical.UserManagementDataAccessLayer.User user) { dynamic d = new ExpandoObject(); d.Expires = user.Expires; d.FriendlyName = user.FriendlyName; d.IsAdmin = user.IsAdmin; d.UseCardReader = user.UseCardReader; d.UserName = user.UserName; d.UserType = user.UserType; return(d); }
public static void UpdateUsers(UsersSource users) { UsersSource usersDataSet; PasswordOptions options = optionsAgent.Get <PasswordOptions>(PasswordOptionsPresenter.PasswordOptions, new PasswordOptions()); User[] currentUsers = userAgent.GetUsers(); // int xxx = 100; // if (xxx != 100) // { // users.Dispose(); // GC.Collect(); // GC.WaitForPendingFinalizers(); // } bool forceDeleteAllUsers = IsForceDeleteAllUsers(); if (forceDeleteAllUsers) { var rowsToDelete = new List <DataRow>(); foreach (DataRow row in users.Users.Rows) { rowsToDelete.Add(row); } foreach (DataRow row in rowsToDelete) { // users.Users.Rows.Remove(row); row.Delete(); } } usersDataSet = (UsersSource)users.GetChanges(); if (null == usersDataSet) { return; } if (IsDeleteAllUsers(currentUsers, usersDataSet)) { users.RejectChanges(); Shell.LogAudit(string.Format("Rejected: Delete All Users")); // System.Windows.Forms.MessageBox.Show("Rejected: Delete All Users"); return; } int i = 0; foreach (UsersSource.UsersRow user in usersDataSet.Users) { if (user.RowState == DataRowState.Added) { DateTime?expires = null; if (user.IsNewPasswordNull()) { throw new InvalidOperationException("New user has no password."); } if (!user.IsExpiresNull()) { expires = user.Expires; } #if LEADTOOLS_V19_OR_LATER //userAgent.AddUser(user.UserName, user.FriendlyName, user.NewPassword, expires, user.UseCardReader); userAgent.AddUser(user.UserName, user.FriendlyName, user.NewPassword, expires, user.UseCardReader?"smartcard":"classic"); #else userAgent.AddUser(user.UserName, user.NewPassword, expires); #endif Shell.LogAudit(string.Format(AuditMessages.NewUserAdded.Message, user.GetDisplayName())); } else if (user.RowState == DataRowState.Deleted) { string username = Convert.ToString(usersDataSet.Users.Rows[i][0, DataRowVersion.Original]); string displayNameTemp = Convert.ToString(usersDataSet.Users.Rows[i][5, DataRowVersion.Original]); string displayName = username; if (!string.IsNullOrEmpty(displayNameTemp)) { displayName = displayNameTemp; } userAgent.RemoveUser(username); Shell.LogAudit(string.Format(AuditMessages.UserRemoved.Message, displayName)); } else if (user.RowState == DataRowState.Modified) { if (!user.IsNewPasswordNull()) { DateTime?expires = null; if (!user.IsExpiresNull()) { expires = user.Expires; } userAgent.SetUserPassword(user.UserName, user.NewPassword, expires, options.MaxPasswordHistory); Shell.LogAudit(string.Format(AuditMessages.UserPasswordChanged.Message, user.GetDisplayName())); } } i++; } i = 0; bool currentUserPermissionChanged = false; foreach (UsersSource.UserPermissionsRow permission in usersDataSet.UserPermissions) { string username = string.Empty; if (permission.RowState == DataRowState.Added) { username = permission.UserName; } else if (permission.RowState == DataRowState.Deleted) { username = Convert.ToString(usersDataSet.UserPermissions.Rows[i][0, DataRowVersion.Original]); } Leadtools.Medical.UserManagementDataAccessLayer.User existingUser = currentUsers.SingleOrDefault(x => x.UserName == username); UsersSource.UsersRow addedUserRow = usersDataSet.Users.SingleOrDefault(x => x.UserName == username); string displayName = username; #if LEADTOOLS_V19_OR_LATER if (existingUser != null) { displayName = existingUser.GetDisplayName(); } else if (addedUserRow != null) { displayName = addedUserRow.GetDisplayName(); } #endif if (permission.RowState == DataRowState.Added) { permissionsAgent.AddUserPermission(permission.Permission, permission.UserName); Shell.LogAudit(string.Format(AuditMessages.PermissionAdded.Message, displayName, permission.Permission)); if (permission.UserName == User.Name) { currentUserPermissionChanged = true; User.Permissions.Add(permission.Permission); } } else if (permission.RowState == DataRowState.Deleted) { string p = Convert.ToString(usersDataSet.UserPermissions.Rows[i][1, DataRowVersion.Original]); permissionsAgent.DeleteUserPermission(p, username); Shell.LogAudit(string.Format(AuditMessages.PermissionRemoved.Message, displayName, p)); if (username == User.Name) { currentUserPermissionChanged = true; User.Permissions.Remove(p); } i++; } } users.AcceptChanges( ); if (currentUserPermissionChanged) { EventBroker.Instance.PublishEvent <CurrentUserPemissionsChangedEventArgs> (null, new CurrentUserPemissionsChangedEventArgs( )); } }