/// <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); } }
/// <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); }