/// <summary> /// Adds a user to this database. /// </summary> /// <param name="user">The user.</param> public static void AddUserEx(MongoCollection Col, MongoUserEx user) { var document = Col.FindOneAs<BsonDocument>(MongoDB.Driver.Builders.Query.EQ("user", user.Username)); if (document == null) { document = new BsonDocument("user", user.Username); } document["roles"] = user.roles; if (document.Contains("readOnly")) { document.Remove("readOnly"); } //必须要Hash一下Password document["pwd"] = MongoUser.HashPassword(user.Username, user.Password); //OtherRole 必须放在Admin.system.users里面 if (Col.Database.Name == MongoDBHelper.DATABASE_NAME_ADMIN) { document["otherDBRoles"] = user.otherDBRoles; } if (string.IsNullOrEmpty(user.Password)) { document["userSource"] = user.userSource; } Col.Save(document); }
/// <summary> /// Delete User /// </summary> private void RemoveUser() { var strTitle = GuiConfig.GetText("Drop User", "DropUser"); var strMessage = GuiConfig.GetText("Are you sure to delete user(s) from this database", "DropUserConfirm"); if (MyMessageBox.ShowConfirm(strTitle, strMessage)) { if (tabDataShower.SelectedTab == tabTableView) { //lstData foreach (ListViewItem item in lstData.SelectedItems) { MongoUserEx.RemoveUserFromSystem(item.SubItems[1].Text, false); } lstData.ContextMenuStrip = null; } else { MongoUserEx.RemoveUserFromSystem(trvData.DatatreeView.SelectedNode.Tag.ToString(), false); trvData.DatatreeView.ContextMenuStrip = null; } RemoveUserToolStripMenuItem.Enabled = false; RefreshGui(); } }
/// <summary> /// Drop User from Admin Group /// </summary> private void RemoveUserFromAdmin() { var strTitle = GuiConfig.GetText("Drop User", "DropUser"); var strMessage = GuiConfig.GetText("Are you sure to delete user(s) from Admin Group?", "DropUserConfirm"); //这里也可以使用普通的删除数据的方法来删除用户。 if (MyMessageBox.ShowConfirm(strTitle, strMessage)) { if (tabDataShower.SelectedTab == tabTableView) { //lstData foreach (ListViewItem item in lstData.SelectedItems) { MongoUserEx.RemoveUserFromSystem(item.SubItems[1].Text, true); } lstData.ContextMenuStrip = null; } else { MongoUserEx.RemoveUserFromSystem(trvData.DatatreeView.SelectedNode.Tag.ToString(), true); trvData.DatatreeView.ContextMenuStrip = null; } RefreshGui(); } }
/// <summary> /// Adds a user to this database. /// </summary> /// <param name="user">The user.</param> public static void AddUserEx(MongoCollection Col, MongoUserEx user) { var document = Col.FindOneAs <BsonDocument>(MongoDB.Driver.Builders.Query.EQ("user", user.Username)); if (document == null) { document = new BsonDocument("user", user.Username); } document["roles"] = user.roles; if (document.Contains("readOnly")) { document.Remove("readOnly"); } //必须要Hash一下Password document["pwd"] = MongoUser.HashPassword(user.Username, user.Password); //OtherRole 必须放在Admin.system.users里面 if (Col.Database.Name == MongoDBHelper.DATABASE_NAME_ADMIN) { document["otherDBRoles"] = user.otherDBRoles; } if (string.IsNullOrEmpty(user.Password)) { document["userSource"] = user.userSource; } Col.Save(document); }
/// <summary> /// 修改用户(完全替换) /// </summary> /// <param name="user"></param> /// <param name="db"></param> /// <returns></returns> public static CommandResult updateUser(MongoUserEx user, MongoDatabase db) { var mongoCmd = new CommandDocument { { "updateUser", user.Username } }; mongoCmd.Add("pwd", user.Password); var roles = new BsonArray(); roles.AddRange(user.Roles.Select(x => x.AsBsonValue())); mongoCmd.Add("roles", roles); if (user.customData != null) { mongoCmd.Add("customData", user.customData); } return(ExecuteMongoDBCommand(mongoCmd, db)); }
//这里有个漏洞,对于数据库来说,对于local的验证和对于admin的验证是相同的。 //如果是加入用户到服务器中,是加入到local还是admin,需要考虑一下。 /// <summary> /// AddUserToSystem /// </summary> /// <param name="newUserEx">用户信息</param> /// <param name="IsAdmin">是否是Admin</param> public static void AddUserToSystem(MongoUserEx newUserEx, Boolean IsAdmin) { MongoServer mongoSvr = SystemManager.GetCurrentServer(); //必须使用MongoCredentials来添加用户,不然的话,Password将使用明文登入到数据库中! //这样的话,在使用MongoCredentials登入的时候,会发生密码错误引发的认证失败 MongoCollection users; if (IsAdmin) { users = mongoSvr.GetDatabase(DATABASE_NAME_ADMIN).GetCollection(MongoDBHelper.COLLECTION_NAME_USER); } else { users = SystemManager.GetCurrentDataBase().GetCollection(MongoDBHelper.COLLECTION_NAME_USER); } //以下代码 1.Ver2.4以前的有ReadOnly,FindUser需要寻找ReadOnly字段 // 2.这个其实不用检查,有的话修改,没有的话,新建 //if (users.Database.FindUser(newUserEx.Username) == null) //{ AddUserEx(users, newUserEx); //} }
/// <summary> /// 确定 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cmdOK_Click(object sender, EventArgs e) { if (txtConfirmPsw.Text != txtPassword.Text) { MyMessageBox.ShowMessage("Error", "Password and Confirm Password not match!"); return; } //MongoUser不能同时具备Password和userSource字段! var user = new MongoUserEx { Username = txtUserName.Text, Password = txtUserName.Text, Roles = _roleList, customData = customData }; if (txtUserName.Text == string.Empty) { MyMessageBox.ShowMessage("Error", "Please fill username!"); return; } try { CommandResult result = null; if (txtUserName.Enabled) { result = MongoUserEx.AddUser(user, _isAdmin); } else { result = MongoUserEx.UpdateUser(user, _isAdmin); } MyMessageBox.ShowMessage("Result:", result.Response.ToString()); } catch (Exception ex) { Utility.ExceptionDeal(ex); } Close(); }
/// <summary> /// Datas the base handler. /// </summary> /// <param name="strNodeType">String node type.</param> /// <param name="e">E.</param> private void DataBaseHandler(string strNodeType, TreeNodeMouseClickEventArgs e) { RuntimeMongoDbContext.SelectObjectTag = e.Node.Tag.ToString(); var roles = MongoUserEx.GetCurrentDbRoles(RuntimeMongoDbContext.CurrentMongoConnectionconfig.ConnectionName, RuntimeMongoDbContext.GetCurrentDataBaseName()); if (GuiConfig.IsUseDefaultLanguage) { statusStripMain.Items[0].Text = "Selected DataBase:" + RuntimeMongoDbContext.SelectTagData; } else { statusStripMain.Items[0].Text = GuiConfig.GetText(TextType.SelectedDataBase) + ":" + RuntimeMongoDbContext.SelectTagData; } //系统库不允许修改 if (!Operater.IsSystemDataBase(RuntimeMongoDbContext.GetCurrentDataBaseName())) { if (RuntimeMongoDbContext.CurrentMongoConnectionconfig.AuthMode) { //根据Roles确定删除数据库/创建数据集等的权限 DelMongoDBToolStripMenuItem.Enabled = MongoAction.JudgeRightByBuildInRole(roles, MongoAction.ActionType.ServerAdministrationActionsDropDatabase); CreateMongoCollectionToolStripMenuItem.Enabled = MongoAction.JudgeRightByBuildInRole(roles, MongoAction.ActionType.DatabaseManagementActionsCreateCollection); CopyDatabasetoolStripMenuItem.Enabled = true; InitGFSToolStripMenuItem.Enabled = MongoAction.JudgeRightByBuildInRole(roles, MongoAction.ActionType.MiscActionsInitGfs); AddUserToolStripMenuItem.Enabled = MongoAction.JudgeRightByBuildInRole(roles, MongoAction.ActionType.DatabaseManagementActionsCreateUser); //If a Slave server can repair database @ Master-Slave is not sure ?? RepairDBToolStripMenuItem.Enabled = MongoAction.JudgeRightByBuildInRole(roles, MongoAction.ActionType.ServerAdministrationActionsRepairDatabase); } else { DelMongoDBToolStripMenuItem.Enabled = true; CreateMongoCollectionToolStripMenuItem.Enabled = true; CreateViewtoolStripMenuItem.Enabled = true; CopyDatabasetoolStripMenuItem.Enabled = true; InitGFSToolStripMenuItem.Enabled = true; AddUserToolStripMenuItem.Enabled = true; RepairDBToolStripMenuItem.Enabled = true; } } AddDBCustomeRoleStripMenuItem.Enabled = true; //使用Shell:从实际情况来看,有一些Shell指令是不依赖与Admin数据库或者和数据库无关的 //所以这里暂时开放所有的Shell指令。 EvalJSToolStripMenuItem.Enabled = true; //备份数据库 DumpDatabaseToolStripMenuItem.Enabled = true; //Profilling ProfillingLevelToolStripMenuItem.Enabled = true; if (strNodeType == ConstMgr.SingleDatabaseTag) { DelMongoDBToolStripMenuItem.Enabled = false; } DBStatusToolStripMenuItem.Enabled = true; if (e.Button == MouseButtons.Right) { contextMenuStripMain = new ContextMenuStrip(); if (SystemManager.MonoMode) { //悲催MONO不支持 var delMongoDb = DelMongoDBToolStripMenuItem.Clone(); delMongoDb.Click += DelMongoDBToolStripMenuItem_Click; contextMenuStripMain.Items.Add(delMongoDb); var createMongoCollection = CreateMongoCollectionToolStripMenuItem.Clone(); createMongoCollection.Click += CreateMongoCollectionToolStripMenuItem_Click; contextMenuStripMain.Items.Add(createMongoCollection); var createView = CreateViewtoolStripMenuItem.Clone(); createView.Click += CreateViewtoolStripMenuItem_Click; contextMenuStripMain.Items.Add(createView); var addUser = AddUserToolStripMenuItem.Clone(); addUser.Click += AddUserToolStripMenuItem_Click; contextMenuStripMain.Items.Add(addUser); var evalJs = EvalJSToolStripMenuItem.Clone(); evalJs.Click += evalJSToolStripMenuItem_Click; contextMenuStripMain.Items.Add(evalJs); var repairDb = RepairDBToolStripMenuItem.Clone(); repairDb.Click += RepairDBToolStripMenuItem_Click; contextMenuStripMain.Items.Add(repairDb); var initGfs = InitGFSToolStripMenuItem.Clone(); initGfs.Click += InitGFSToolStripMenuItem_Click; contextMenuStripMain.Items.Add(initGfs); var dumpDatabase = DumpDatabaseToolStripMenuItem.Clone(); dumpDatabase.Click += DumpDatabaseToolStripMenuItem_Click; contextMenuStripMain.Items.Add(dumpDatabase); var restoreMongo = RestoreMongoToolStripMenuItem.Clone(); restoreMongo.Click += RestoreMongoToolStripMenuItem_Click; contextMenuStripMain.Items.Add(restoreMongo); contextMenuStripMain.Items.Add(new ToolStripSeparator()); var profillingLevel = ProfillingLevelToolStripMenuItem.Clone(); profillingLevel.Click += profillingLevelToolStripMenuItem_Click; contextMenuStripMain.Items.Add(profillingLevel); var dbStatus = DBStatusToolStripMenuItem.Clone(); dbStatus.Click += DBStatusToolStripMenuItem_Click; contextMenuStripMain.Items.Add(dbStatus); } else { contextMenuStripMain.Items.Add(DelMongoDBToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(CreateMongoCollectionToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(CreateViewtoolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(CopyDatabasetoolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(AddUserToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(AddDBCustomeRoleStripMenuItem.Clone()); contextMenuStripMain.Items.Add(EvalJSToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(RepairDBToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(InitGFSToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(DumpDatabaseToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(RestoreMongoToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(new ToolStripSeparator()); contextMenuStripMain.Items.Add(ProfillingLevelToolStripMenuItem.Clone()); contextMenuStripMain.Items.Add(DBStatusToolStripMenuItem.Clone()); } e.Node.ContextMenuStrip = contextMenuStripMain; contextMenuStripMain.Show(trvsrvlst.PointToScreen(e.Location)); } }