示例#1
0
        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);
        }
示例#2
0
        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( ));
            }
        }