/// <summary>
        /// ユーザーの保存
        /// </summary>
        /// <param name="target">ユーザーと受信者の集約Entity</param>
        /// <returns>保存成否</returns>
        public bool Save(UserAndReceiver target)
        {
            // DBから最新のユーザーマスタを取得
            var dbUserAndReceiver = GetUserAndReceiver(target.ID);

            // ユーザーマスタの保存
            if (!UserSave(dbUserAndReceiver))
            {
                return(false);
            }

            // 受信者マスタの保存・削除
            Receiver receiver = null;

            if (dbUserAndReceiver != null)
            {
                receiver = dbUserAndReceiver.UserReceiver;
            }
            if (target.UserReceiver is null && receiver != null)
            {
                // 受信者マスタを廃止する場合、受信者マスタの削除を行う
                if (!RemoveReceiver(target.ID))
                {
                    return(false);
                }
            }
Пример #2
0
        /// <summary>
        /// ユーザー情報の保存
        /// </summary>
        /// <param name="ID">ユーザーID</param>
        /// <param name="userVersion">取得時のユーザーマスタのバージョン</param>
        /// <param name="useReceiver">受信者マスタ利用か否か</param>
        /// <param name="displayName">受信者名</param>
        /// <param name="displayList">送信元表示</param>
        /// <param name="isAdminRole">管理者権限</param>
        /// <param name="isViewlistRole">一覧確認権限</param>
        /// <param name="receiverVersion">取得時の受信マスタのバージョン</param>
        /// <param name="newPassword">再設定のパスワード(平文)</param>
        /// <param name="disabled">無効状態</param>
        /// <returns>登録成功・失敗</returns>
        /// <remarks>newPasswordがnullの場合はパスワード変更を行わない</remarks>
        public bool Save(string ID, int userVersion,
                         bool useReceiver, string displayName, bool displayList, bool isAdminRole, bool isViewlistRole, int receiverVersion,
                         string newPassword, bool disabled)
        {
            try
            {
                var result = false;

                // トランザクション開始
                userAndReceiverRepository.BeginTransaction();

                // パスワードの取得または再設定
                var password = string.Empty;
                var salt     = string.Empty;
                if (string.IsNullOrEmpty(newPassword))
                {
                    var user = userAndReceiverRepository.GetUserAndReceiver(new UserId(ID));
                    password = user.Password;
                    salt     = user.Salt;
                }
                else
                {
                    // 新しいパスワードで暗号化済みパスワードとソルトを取得
                    var encryptedPasswordAndSalt = repository.CreateEncryptedPassword(newPassword);
                    password = encryptedPasswordAndSalt.encryptedPassword;
                    salt     = encryptedPasswordAndSalt.salt;
                }

                // 登録するエンティティを生成
                var      targetUser     = User.Create(ID, password, salt, userVersion, disabled);
                Receiver targetReceiver = null;
                if (useReceiver)
                {
                    targetReceiver = Receiver.Create(displayName, ID, displayList, isAdminRole, isViewlistRole, receiverVersion);
                }

                // DB更新
                result = userAndReceiverRepository.Save(UserAndReceiver.Create(targetUser, targetReceiver));

                // 更新結果を受けてCommit/Rollback
                if (result)
                {
                    userAndReceiverRepository.Commit();
                }
                else
                {
                    userAndReceiverRepository.Rollback();
                }

                return(result);
            }
            catch (Exception ex)
            {
                userAndReceiverRepository.Rollback();
                throw ex;
            }
        }
        /// <summary>
        /// ユーザーリストを取得:メイン部分
        /// </summary>
        /// <param name="userId">ユーザーID</param>
        /// <returns>ユーザーリスト</returns>
        /// <remarks>メイン処理</remarks>
        private List <UserAndReceiver> Find(UserId userId)
        {
            var result = new List <UserAndReceiver>();

            // パラメータ初期化
            db.ClearParam();

            var sql = new StringBuilder();

            sql.AppendLine("SELECT");
            sql.AppendLine(" m_user.unique_name");
            sql.AppendLine(" ,m_user.password");
            sql.AppendLine(" ,m_user.salt");
            sql.AppendLine(" ,m_user.disabled");
            sql.AppendLine(" ,m_user.version u_version");
            sql.AppendLine(" ,m_receiver.fullname");
            sql.AppendLine(" ,m_receiver.display_list");
            sql.AppendLine(" ,m_receiver.is_admin_role");
            sql.AppendLine(" ,m_receiver.is_viewlist_role");
            sql.AppendLine(" ,m_receiver.version r_version");
            sql.AppendLine("FROM");
            sql.AppendLine("  m_user");
            sql.AppendLine("LEFT OUTER JOIN  m_receiver ");
            sql.AppendLine("  ON m_receiver.unique_name = m_user.unique_name");

            // ユーザ指定
            if (userId != null)
            {
                sql.AppendLine("WHERE");
                sql.AppendLine("  m_user.unique_name = @unique_name");

                // Param設定
                db.AddParam("@unique_name", userId.Value);
            }
            else
            {
                sql.AppendLine("ORDER BY m_user.unique_name");
            }

            var sqlResult = db.Fill(sql.ToString());

            foreach (DataRow row in sqlResult.Rows)
            {
                // ユーザー
                var id       = row["unique_name"].ToString();
                var password = row["password"].ToString();
                var salt     = row["salt"].ToString();
                var version  = int.Parse(row["u_version"].ToString());

                var disabled = false;
                if (!bool.TryParse(row["disabled"].ToString(), out disabled))
                {
                    if (int.TryParse(row["disabled"].ToString(), out var disabledValue))
                    {
                        disabled = disabledValue == 1;
                    }
                }

                var user = User.Create(id, password, salt, version, disabled);

                // 受信者
                Receiver receiver = null;
                if (row["r_version"] != DBNull.Value)
                {
                    var name           = row["fullname"].ToString();
                    var displayList    = false;
                    var isAdminRole    = false;
                    var isViewlistRole = false;
                    var r_version      = int.Parse(row["r_version"].ToString());

                    if (!bool.TryParse(row["display_list"].ToString(), out displayList))
                    {
                        if (int.TryParse(row["display_list"].ToString(), out var displayListValue))
                        {
                            displayList = displayListValue == 1;
                        }
                    }

                    if (!bool.TryParse(row["is_admin_role"].ToString(), out isAdminRole))
                    {
                        if (int.TryParse(row["is_admin_role"].ToString(), out var isAdminRoleValue))
                        {
                            isAdminRole = isAdminRoleValue == 1;
                        }
                    }

                    if (!bool.TryParse(row["is_viewlist_role"].ToString(), out isViewlistRole))
                    {
                        if (int.TryParse(row["is_viewlist_role"].ToString(), out var isViewlistRoleValue))
                        {
                            isViewlistRole = isViewlistRoleValue == 1;
                        }
                    }

                    receiver = Receiver.Create(name, id, displayList, isAdminRole, isViewlistRole, r_version);
                }

                // 集約エンティティ作成
                result.Add(UserAndReceiver.Create(user, receiver));
            }
            return(result);
        }