From 0a1b7b8f05a189ee2015c12429927369019f90fe Mon Sep 17 00:00:00 2001 From: Candy Date: Mon, 7 Sep 2020 17:57:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84DBDevelopService=20WebApi?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Develop/DBDevelopClientWebApi/Database.cs | 134 ++- Develop/DBDevelopClientWebApi/DatabaseUser.cs | 157 +++ .../DevelopServiceHelper.cs | 995 +++++++++++++++++- Develop/DBDevelopClientWebApi/RequestBase.cs | 95 +- Develop/DBDevelopClientWebApi/SystemUser.cs | 82 ++ .../DBDevelopService/Controllers/Database.cs | 129 ++- .../Controllers/DatabaseUser.cs | 157 +++ .../Controllers/DevelopServerController.cs | 643 ++++++++++- .../Controllers/RequestBase.cs | 59 +- .../Controllers/SystemUser.cs | 82 ++ .../DBDevelopService/Security/UserDocument.cs | 5 +- .../Services/DevelopServerService.cs | 4 +- .../DBStudio/Properties/launchSettings.json | 2 +- .../Develop/DevelopWebApiDemo/MainWindow.xaml | 6 + .../DevelopWebApiDemo/MainWindow.xaml.cs | 53 + 15 files changed, 2555 insertions(+), 48 deletions(-) create mode 100644 Develop/DBDevelopClientWebApi/DatabaseUser.cs create mode 100644 Develop/DBDevelopClientWebApi/SystemUser.cs create mode 100644 Develop/DBDevelopService/Controllers/DatabaseUser.cs create mode 100644 Develop/DBDevelopService/Controllers/SystemUser.cs diff --git a/Develop/DBDevelopClientWebApi/Database.cs b/Develop/DBDevelopClientWebApi/Database.cs index d57fd47..dd46b0a 100644 --- a/Develop/DBDevelopClientWebApi/Database.cs +++ b/Develop/DBDevelopClientWebApi/Database.cs @@ -1,10 +1,14 @@ -using System; +using Cdy.Tag; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace DBDevelopClientWebApi { + /// + /// + /// public class Database { public string Name { get; set; } @@ -21,19 +25,139 @@ namespace DBDevelopClientWebApi public string Parent { get; set; } } - /// - /// - /// public class WebApiTag { /// /// /// - public Cdy.Tag.Tagbase RealTag { get; set; } + public WebApiRealTag RealTag { get; set; } /// /// /// public Cdy.Tag.HisTag HisTag { get; set; } } + + public class WebApiRealTag + { + public int Id { get; set; } + public string Name { get; set; } + public int Type { get; set; } + public string Group { get; set; } + public string Desc { get; set; } + public string LinkAddress { get; set; } + public int ReadWriteType { get; set; } + public string Convert { get; set; } + public double MaxValue { get; set; } + public double MinValue { get; set; } + public byte Precision { get; set; } + + /// + /// + /// + /// + /// + public static WebApiRealTag CreatFromTagbase(Tagbase realtag) + { + WebApiRealTag tag = new WebApiRealTag(); + tag.CloneFromRealTag(realtag); + return tag; + } + + /// + /// + /// + /// + public void CloneFromRealTag(Tagbase realtag) + { + this.Id = realtag.Id; + this.Name = realtag.Name; + this.Type = (byte)realtag.Type; + this.Group = realtag.Group; + this.Desc = realtag.Desc; + this.LinkAddress = realtag.LinkAddress; + this.ReadWriteType = (int)realtag.ReadWriteType; + this.Convert = realtag.Conveter != null ? realtag.Conveter.SeriseToString() : ""; + if (realtag is NumberTagBase) + { + this.MaxValue = (realtag as NumberTagBase).MaxValue; + this.MinValue = (realtag as NumberTagBase).MinValue; + } + if (realtag is FloatingTagBase) + { + this.Precision = (realtag as FloatingTagBase).Precision; + } + } + + public Tagbase ConvertToTagbase() + { + Cdy.Tag.Tagbase re = null; + switch (this.Type) + { + case (int)(Cdy.Tag.TagType.Bool): + re = new Cdy.Tag.BoolTag(); + break; + case (int)(Cdy.Tag.TagType.Byte): + re = new Cdy.Tag.ByteTag(); + break; + case (int)(Cdy.Tag.TagType.DateTime): + re = new Cdy.Tag.DateTimeTag(); + break; + case (int)(Cdy.Tag.TagType.Double): + re = new Cdy.Tag.DoubleTag(); + break; + case (int)(Cdy.Tag.TagType.Float): + re = new Cdy.Tag.FloatTag(); + break; + case (int)(Cdy.Tag.TagType.Int): + re = new Cdy.Tag.IntTag(); + break; + case (int)(Cdy.Tag.TagType.UInt): + re = new Cdy.Tag.UIntTag(); + break; + case (int)(Cdy.Tag.TagType.ULong): + re = new Cdy.Tag.ULongTag(); + break; + case (int)(Cdy.Tag.TagType.UShort): + re = new Cdy.Tag.UShortTag(); + break; + case (int)(Cdy.Tag.TagType.Long): + re = new Cdy.Tag.LongTag(); + break; + case (int)(Cdy.Tag.TagType.Short): + re = new Cdy.Tag.ShortTag(); + break; + case (int)(Cdy.Tag.TagType.String): + re = new Cdy.Tag.StringTag(); + break; + } + if (re != null) + { + re.Name = this.Name; + re.LinkAddress = this.LinkAddress; + re.Group = this.Group; + re.Desc = this.Desc; + re.Id = (int)this.Id; + re.ReadWriteType = (Cdy.Tag.ReadWriteMode)this.ReadWriteType; + if (!string.IsNullOrEmpty(this.Convert)) + { + re.Conveter = this.Convert.DeSeriseToValueConvert(); + } + if (re is Cdy.Tag.NumberTagBase) + { + (re as Cdy.Tag.NumberTagBase).MaxValue = this.MaxValue; + (re as Cdy.Tag.NumberTagBase).MinValue = this.MinValue; + } + + if (re is Cdy.Tag.FloatingTagBase) + { + (re as Cdy.Tag.FloatingTagBase).Precision = (byte)this.Precision; + } + } + + return re; + } + + + } } diff --git a/Develop/DBDevelopClientWebApi/DatabaseUser.cs b/Develop/DBDevelopClientWebApi/DatabaseUser.cs new file mode 100644 index 0000000..6756eda --- /dev/null +++ b/Develop/DBDevelopClientWebApi/DatabaseUser.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace DBDevelopClientWebApi +{ + /// + /// + /// + public class WebApiUserGroup + { + public string Name { get; set; } + + /// + /// + /// + public string Parent { get; set; } + } + + /// + /// + /// + public class WebApiUserGroupRequest : WebApiDatabaseRequest + { + public string Name { get; set; } + + /// + /// + /// + public string Parent { get; set; } + } + + /// + /// + /// + public class WebApiMoveUserGroupRequest : WebApiDatabaseRequest + { + public string Name { get; set; } + + /// + /// + /// + public string OldParentName { get; set; } + + /// + /// + /// + public string NewParentName { get; set; } + } + + /// + /// + /// + public class WebApiRenameUserGroupRequest : WebApiDatabaseRequest + { + public string NewName { get; set; } + + /// + /// + /// + public string OldFullName { get; set; } + } + + /// + /// + /// + public class WebApiRequestByUserGroup:WebApiDatabaseRequest + { + public string GroupFullName { get; set; } + } + + + /// + /// + /// + public class WebApiNewDatabasePermissionRequest : WebApiDatabaseRequest + { + /// + /// + /// + public string Name { get; set; } + /// + /// + /// + public string Desc { get; set; } + + /// + /// + /// + public bool EnableWrite { get; set; } + + /// + /// + /// + public bool SuperPermission { get; set; } + + /// + /// 访问的变量 + /// + public List Group { get; set; } + + } + + /// + /// + /// + public class WebApiRemoveDatabasePermissionRequest : WebApiDatabaseRequest + { + public string Permission { get; set; } + } + + public class WebApiUserRequest : WebApiDatabaseRequest + { + public string UserName { get; set; } + } + + + public class WebApiUserAndPassword: WebApiUserRequest + { + + + public string Password { get; set; } + } + + /// + /// + /// + public class WebApiUserInfo : WebApiUserAndPassword + { + /// + /// + /// + public string Group { get; set; } + + /// + /// + /// + public List Permissions { get; set; } + + } + + public class WebApiUserInfoWithoutPassword : WebApiUserRequest + { + /// + /// + /// + public string Group { get; set; } + + /// + /// + /// + public List Permissions { get; set; } + + } + +} diff --git a/Develop/DBDevelopClientWebApi/DevelopServiceHelper.cs b/Develop/DBDevelopClientWebApi/DevelopServiceHelper.cs index b1401d8..2ed8019 100644 --- a/Develop/DBDevelopClientWebApi/DevelopServiceHelper.cs +++ b/Develop/DBDevelopClientWebApi/DevelopServiceHelper.cs @@ -1,6 +1,9 @@ -using Newtonsoft.Json; +using Cdy.Tag; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; +using System.Collections.Generic; +using System.Collections.Specialized; using System.Net; using System.Text; @@ -15,7 +18,11 @@ namespace DBDevelopClientWebApi #region ... Variables ... WebClient mClient; + private string mLoginId; + + public const int PageCount = 500; + #endregion ...Variables... #region ... Events ... @@ -28,6 +35,8 @@ namespace DBDevelopClientWebApi #region ... Properties ... + + /// /// /// @@ -36,21 +45,23 @@ namespace DBDevelopClientWebApi /// /// /// - public string LastMessage { get; set; } + public string LastErroMessage { get; set; } #endregion ...Properties... #region ... Methods ... + #region database + /// /// /// /// /// - private string Post(string fun,string sval) + private string Post(string fun, string sval) { - if(mClient==null) - mClient = new WebClient(); + if (mClient == null) + mClient = new WebClient(); mClient.Headers[HttpRequestHeader.ContentType] = "application/json"; mClient.Encoding = Encoding.UTF8; return mClient.UploadString(Server + "/DevelopServer/" + fun, sval); @@ -65,12 +76,12 @@ namespace DBDevelopClientWebApi public bool Login(string username, string password) { LoginMessage login = new LoginMessage() { UserName = username, Password = password }; - string sval = Post("Login",JsonConvert.SerializeObject(login)); + string sval = Post("Login", JsonConvert.SerializeObject(login)); - var result = JsonConvert.DeserializeObject(sval); - if(result.HasErro) + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) { - LastMessage = result.ErroMsg; + LastErroMessage = result.ErroMsg; return false; } else @@ -91,6 +102,972 @@ namespace DBDevelopClientWebApi return true; } + /// + /// + /// + /// + /// + /// + public bool NewDatabase(string database, string desc) + { + WebApiNewDatabaseRequest nd = new WebApiNewDatabaseRequest() { Database = database, Desc = desc, Id = mLoginId }; + string sval = Post("NewDatabase", JsonConvert.SerializeObject(nd)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return (bool)result.Result; + } + } + + /// + /// + /// + /// + public List QueryDatabase() + { + RequestBase nd = new RequestBase() { Id = mLoginId }; + var sval = Post("QueryDatabase", JsonConvert.SerializeObject(nd)); + var result = JsonConvert.DeserializeObject>>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return null; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + public bool Start(string database) + { + WebApiDatabaseRequest wr = new WebApiDatabaseRequest() { Database = database, Id = mLoginId }; + var sval = Post("Start", JsonConvert.SerializeObject(wr)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return (bool)result.Result; + } + } + + /// + /// + /// + /// + /// + public bool Stop(string database) + { + WebApiDatabaseRequest wr = new WebApiDatabaseRequest() { Database = database, Id = mLoginId }; + var sval = Post("Stop", JsonConvert.SerializeObject(wr)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return (bool)result.Result; + } + } + + /// + /// + /// + /// + /// + public bool ReRun(string database) + { + WebApiDatabaseRequest wr = new WebApiDatabaseRequest() { Database = database, Id = mLoginId }; + var sval = Post("ReRun", JsonConvert.SerializeObject(wr)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return (bool)result.Result; + } + } + + /// + /// + /// + /// + /// + public bool IsDatabaseRunning(string database) + { + WebApiDatabaseRequest wr = new WebApiDatabaseRequest() { Database = database, Id = mLoginId }; + var sval = Post("IsDatabaseRunning", JsonConvert.SerializeObject(wr)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return (bool)result.Result; + } + } + + /// + /// + /// + /// + /// + public bool IsDatabaseDirty(string database) + { + WebApiDatabaseRequest wr = new WebApiDatabaseRequest() { Database = database, Id = mLoginId }; + var sval = Post("IsDatabaseDirty", JsonConvert.SerializeObject(wr)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return (bool)result.Result; + } + } + + /// + /// + /// + /// + /// + public List GetTagGroup(string database) + { + WebApiDatabaseRequest wr = new WebApiDatabaseRequest() { Database = database, Id = mLoginId }; + var sval = Post("GetTagGroup", JsonConvert.SerializeObject(wr)); + var result = JsonConvert.DeserializeObject>>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return null; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + public List> GetTagByGroup(string database, string group, int pageIndex, Dictionary mFilter = null) + { + WebApiGetTagByGroupRequest wr = new WebApiGetTagByGroupRequest() { Database = database, Id = mLoginId, GroupName = group, Index = pageIndex, Filters = mFilter }; + var sval = Post("GetTagByGroup", JsonConvert.SerializeObject(wr)); + var result = JsonConvert.DeserializeObject>>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return null; + } + else + { + List> re = new List>(); + foreach (var vv in result.Result) + { + re.Add(new Tuple(vv.RealTag.ConvertToTagbase(), vv.HisTag)); + } + return re; + } + } + + /// + /// + /// + /// + /// + public bool AddTagGroup(string name, string parentName, string database) + { + WebApiAddGroupRequest request = new WebApiAddGroupRequest() { Database = database, Id = mLoginId, Name = name, ParentName = parentName }; + var sval = Post("AddTagGroup", JsonConvert.SerializeObject(request)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + public bool RemoveTagGroup(string fullName, string database) + { + WebApiRemoveGroupRequest request = new WebApiRemoveGroupRequest() { Database = database, Id = mLoginId, FullName = fullName }; + var sval = Post("RemoveTagGroup", JsonConvert.SerializeObject(request)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + public bool RenameTagGroup(string oldFullName, string newName, string database) + { + WebApiRenameGroupRequest request = new WebApiRenameGroupRequest() { Database = database, Id = mLoginId, Name = newName, OldFullName = oldFullName }; + var sval = Post("RenameTagGroup", JsonConvert.SerializeObject(request)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + public bool MoveTagGroup(string name, string oldParentName, string newParentName, string database) + { + WebApiMoveTagGroupRequest request = new WebApiMoveTagGroupRequest() { Database = database, Id = mLoginId, Name = name, OldParentName = oldParentName, NewParentName = newParentName }; + var sval = Post("MoveTagGroup", JsonConvert.SerializeObject(request)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + public bool RemoveTags(List tagIds, string database) + { + WebApiRemoveTagRequest request = new WebApiRemoveTagRequest() { Database = database, Id = mLoginId, TagIds = tagIds }; + var sval = Post("RemoveTag", JsonConvert.SerializeObject(request)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + public bool RemoveTag(int tagId, string database) + { + return RemoveTags(new List() { tagId }, database); + } + + /// + /// + /// + /// + /// + /// + /// + public int? AddTag(Tagbase realTag, HisTag histag, string database) + { + WebApiAddTagRequest request = new WebApiAddTagRequest() { Database = database, Id = mLoginId, Tags = new List() { new WebApiTag() { RealTag = WebApiRealTag.CreatFromTagbase(realTag), HisTag = histag } } }; + var sval = Post("AddTag", JsonConvert.SerializeObject(request)); + var result = JsonConvert.DeserializeObject>>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return null; + } + else + { + return result.Result[0]; + } + } + + /// + /// + /// + /// + /// + /// + public List AddTags(List> mtags, string database) + { + List ltmp = new List(); + foreach (var vv in mtags) + { + ltmp.Add(new WebApiTag() { RealTag = WebApiRealTag.CreatFromTagbase(vv.Item1), HisTag = vv.Item2 }); + } + WebApiAddTagRequest request = new WebApiAddTagRequest() { Database = database, Id = mLoginId, Tags = ltmp }; + var sval = Post("AddTag", JsonConvert.SerializeObject(request)); + var result = JsonConvert.DeserializeObject>>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return null; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + public bool UpdateHisTag(HisTag histag, string database) + { + WebApiTagRequest request = new WebApiTagRequest() { Id = mLoginId, Database = database, Tag = new WebApiTag() { HisTag = histag } }; + var sval = Post("UpdateHisTag", JsonConvert.SerializeObject(request)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + public bool UpdateRealTag(Tagbase realtag, string database) + { + WebApiTagRequest request = new WebApiTagRequest() { Id = mLoginId, Database = database, Tag = new WebApiTag() { RealTag = WebApiRealTag.CreatFromTagbase(realtag) } }; + var sval = Post("UpdateRealTag", JsonConvert.SerializeObject(request)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + public int? Import(Tagbase realTag, HisTag histag, int mode, string database) + { + WebApiImportTagRequest request = new WebApiImportTagRequest() { Database = database, Id = mLoginId, Mode = mode, Tag = new WebApiTag() { RealTag = WebApiRealTag.CreatFromTagbase(realTag), HisTag = histag } }; + var sval = Post("Import", JsonConvert.SerializeObject(request)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return null; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + public bool Save(string database) + { + WebApiDatabaseRequest request = new WebApiDatabaseRequest() { Database = database, Id = mLoginId }; + var sval = Post("Save", JsonConvert.SerializeObject(request)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + public bool Cancel(string database) + { + WebApiDatabaseRequest request = new WebApiDatabaseRequest() { Database = database, Id = mLoginId }; + var sval = Post("Cancel", JsonConvert.SerializeObject(request)); + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + #endregion + + #region Database User + + /// + /// + /// + /// + /// + /// + public bool AddDatabaseUserGroup(string Name,string Parent,string database) + { + WebApiUserGroupRequest login = new WebApiUserGroupRequest() { Name = Name, Parent = Parent,Database=database,Id=mLoginId }; + string sval = Post("AddDatabaseUserGroup", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + public List GetDatabaseUserGroup(string database) + { + WebApiDatabaseRequest login = new WebApiDatabaseRequest() { Database=database,Id=mLoginId }; + string sval = Post("GetDatabaseUserGroup", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return null; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + public bool MoveDatabaseUserGroup(string name, string oldParentName, string newParentName, string database) + { + WebApiMoveUserGroupRequest login = new WebApiMoveUserGroupRequest() { Name = name, NewParentName = newParentName, OldParentName = oldParentName, Database = database, Id = mLoginId }; + string sval = Post("MoveDatabaseUserGroup", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + public bool RemoveDatabaseUserGroup(string group,string database) + { + WebApiRequestByUserGroup login = new WebApiRequestByUserGroup() { GroupFullName=group, Database = database, Id = mLoginId }; + string sval = Post("RemoveDatabaseUserGroup", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + public bool RenameDatabaseUserGroup(string newName,string oldFullName,string database) + { + WebApiRenameUserGroupRequest login = new WebApiRenameUserGroupRequest() { NewName = newName,OldFullName= oldFullName, Database = database, Id = mLoginId }; + string sval = Post("RenameDatabaseUserGroup", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + public List GetDatabaseUserByGroup(string groupFullName,string database) + { + WebApiRequestByUserGroup login = new WebApiRequestByUserGroup() { GroupFullName = groupFullName, Database = database, Id = mLoginId }; + string sval = Post("GetDatabaseUserByGroup", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return null; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public bool NewDatabaseUser(string userName,string password,string group,List permissions,string database) + { + WebApiUserInfo login = new WebApiUserInfo() { UserName = userName, Password = password,Group=group,Permissions=permissions, Database = database, Id = mLoginId }; + string sval = Post("NewDatabaseUser", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public bool UpdateDatabaseUser(string userName, string password, string group, List permissions, string database) + { + WebApiUserInfo login = new WebApiUserInfo() { UserName = userName, Password = password, Group = group, Permissions = permissions, Database = database, Id = mLoginId }; + string sval = Post("UpdateDatabaseUser", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + public bool ModifyDatabaseUserPassword(string userName,string password,string database) + { + WebApiUserAndPassword login = new WebApiUserAndPassword() { UserName = userName, Password = password, Database = database, Id = mLoginId }; + string sval = Post("ModifyDatabaseUserPassword", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + public bool RemoveDatabaseUser(string userName,string database) + { + WebApiUserRequest login = new WebApiUserRequest() { UserName = userName, Database = database, Id = mLoginId }; + string sval = Post("RemoveDatabaseUser", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public bool NewDatabasePermission(string name, string desc, bool enableWriter, bool superPermission, List group, string database) + { + WebApiNewDatabasePermissionRequest login = new WebApiNewDatabasePermissionRequest() { Name = name, Desc = desc, EnableWrite = enableWriter, SuperPermission = superPermission, Group = group, Database = database, Id = mLoginId }; + string sval = Post("NewDatabasePermission", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + public bool RemoveDatabasePermission(string permission,string database) + { + WebApiRemoveDatabasePermissionRequest login = new WebApiRemoveDatabasePermissionRequest() { Permission=permission, Database = database, Id = mLoginId }; + string sval = Post("RemoveDatabasePermission", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public bool UpdateDatabasePermission(string name, string desc, bool enableWriter, bool superPermission, List group, string database) + { + WebApiNewDatabasePermissionRequest login = new WebApiNewDatabasePermissionRequest() { Name = name, Desc = desc, EnableWrite = enableWriter, SuperPermission = superPermission, Group = group, Database = database, Id = mLoginId }; + string sval = Post("UpdateDatabasePermission", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + #endregion + + + #region System User + + /// + /// + /// + /// + /// + /// + public bool NewUser(string username,string password) + { + WebApiNewSystemUserRequest login = new WebApiNewSystemUserRequest() { UserName = username,Password=password, Id = mLoginId }; + string sval = Post("NewUser", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + public bool ReNameUser(string oldName,string newName) + { + WebApiReNameSystemUserRequest login = new WebApiReNameSystemUserRequest() { OldName = oldName, NewName = newName, Id = mLoginId }; + string sval = Post("ReNameUser", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + public bool ModifyPassword(string userName,string password,string newpassword) + { + WebApiModifySystemUserPasswordRequest login = new WebApiModifySystemUserPasswordRequest() { UserName = userName, Password = password,NewPassword=newpassword, Id = mLoginId }; + string sval = Post("ModifyPassword", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + /// + /// + public bool UpdateUser(string userName,bool isAdmin,bool newDatabasePerssion,List database) + { + WebApiUpdateSystemUserRequest login = new WebApiUpdateSystemUserRequest() { UserName = userName, IsAdmin = isAdmin, NewDatabasePermission = newDatabasePerssion,Databases=database, Id = mLoginId }; + string sval = Post("ModifyPassword", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + /// + public bool UpdateUserPassword(string username,string password) + { + WebApiNewSystemUserRequest login = new WebApiNewSystemUserRequest() { UserName = username, Password=password, Id = mLoginId }; + string sval = Post("UpdateUserPassword", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + public List GetUsers() + { + RequestBase login = new RequestBase() { Id = mLoginId }; + string sval = Post("GetUsers", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return null; + } + else + { + return result.Result; + } + } + + /// + /// + /// + /// + /// + public bool RemoveUser(string userName) + { + WebApiRemoveSystemUserRequest login = new WebApiRemoveSystemUserRequest() { UserName = userName,Id = mLoginId }; + string sval = Post("RemoveUser", JsonConvert.SerializeObject(login)); + + var result = JsonConvert.DeserializeObject>(sval); + if (result.HasErro) + { + LastErroMessage = result.ErroMsg; + return false; + } + else + { + return result.Result; + } + } + + #endregion + #endregion ...Methods... #region ... Interfaces ... diff --git a/Develop/DBDevelopClientWebApi/RequestBase.cs b/Develop/DBDevelopClientWebApi/RequestBase.cs index d3b3f55..ac45e37 100644 --- a/Develop/DBDevelopClientWebApi/RequestBase.cs +++ b/Develop/DBDevelopClientWebApi/RequestBase.cs @@ -6,11 +6,6 @@ using System.Threading.Tasks; namespace DBDevelopClientWebApi { - public class RequestBase - { - public string Id { get; set; } - } - /// /// /// @@ -51,6 +46,14 @@ namespace DBDevelopClientWebApi #endregion ...Interfaces... } + /// + /// + /// + public class RequestBase + { + public string Id { get; set; } + } + /// /// /// @@ -106,7 +109,7 @@ namespace DBDevelopClientWebApi /// /// /// - public class NewDatabaseRequest : WebApiDatabaseRequest + public class WebApiNewDatabaseRequest : WebApiDatabaseRequest { /// /// @@ -118,7 +121,7 @@ namespace DBDevelopClientWebApi /// /// /// - public class GetTagByGroupRequest : WebApiDatabaseRequest + public class WebApiGetTagByGroupRequest : WebApiDatabaseRequest { /// /// @@ -128,7 +131,7 @@ namespace DBDevelopClientWebApi /// /// /// - public Dictionary Filters { get; set; } + public Dictionary Filters { get; set; } /// /// @@ -136,6 +139,60 @@ namespace DBDevelopClientWebApi public int Index { get; set; } } + /// + /// + /// + public class WebApiAddGroupRequest : WebApiDatabaseRequest + { + public string Name { get; set; } + /// + /// + /// + public string ParentName { get; set; } + } + + /// + /// + /// + public class WebApiRemoveGroupRequest : WebApiDatabaseRequest + { + public string FullName { get; set; } + } + + /// + /// + /// + public class WebApiRenameGroupRequest : WebApiDatabaseRequest + { + public string Name { get; set; } + /// + /// + /// + public string OldFullName { get; set; } + } + + /// + /// + /// + public class WebApiMoveTagGroupRequest : WebApiDatabaseRequest + { + /// + /// + /// + public string Name { get; set; } + + /// + /// + /// + public string NewParentName { get; set; } + + /// + /// + /// + public string OldParentName { get; set; } + } + + /// /// /// @@ -158,5 +215,27 @@ namespace DBDevelopClientWebApi } + /// + /// + /// + public class ResultResponse + { + /// + /// + /// + public bool HasErro { get; set; } + + /// + /// + /// + public T Result { get; set; } + + /// + /// + /// + public string ErroMsg { get; set; } + } + + } diff --git a/Develop/DBDevelopClientWebApi/SystemUser.cs b/Develop/DBDevelopClientWebApi/SystemUser.cs new file mode 100644 index 0000000..6546cc9 --- /dev/null +++ b/Develop/DBDevelopClientWebApi/SystemUser.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace DBDevelopClientWebApi +{ + public class WebApiNewSystemUserRequest: RequestBase + { + + #region ... Variables ... + + #endregion ...Variables... + + #region ... Events ... + + #endregion ...Events... + + #region ... Constructor... + + #endregion ...Constructor... + + #region ... Properties ... + public string UserName { get; set; } + + /// + /// + /// + public string Password { get; set; } + #endregion ...Properties... + + #region ... Methods ... + + #endregion ...Methods... + + #region ... Interfaces ... + + #endregion ...Interfaces... + } + + public class WebApiReNameSystemUserRequest : RequestBase + { + public string OldName { get; set; } + public string NewName { get; set; } + } + + public class WebApiModifySystemUserPasswordRequest : RequestBase + { + public string UserName { get; set; } + public string Password { get; set; } + public string NewPassword { get; set; } + } + + + public class WebApiUpdateSystemUserRequest : RequestBase + { + public string UserName { get; set; } + public bool IsAdmin { get; set; } + public bool NewDatabasePermission { get; set; } + public List Databases { get; set; } + } + + /// + /// + /// + public class WebApiSystemUserItem + { + public string UserName { get; set; } + public bool IsAdmin { get; set; } + public bool NewDatabase { get; set; } + public List Databases { get; set; } + } + + /// + /// + /// + public class WebApiRemoveSystemUserRequest : RequestBase + { + public string UserName { get; set; } + } + +} diff --git a/Develop/DBDevelopService/Controllers/Database.cs b/Develop/DBDevelopService/Controllers/Database.cs index 155cff6..686461b 100644 --- a/Develop/DBDevelopService/Controllers/Database.cs +++ b/Develop/DBDevelopService/Controllers/Database.cs @@ -1,4 +1,5 @@ -using System; +using Cdy.Tag; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -29,7 +30,7 @@ namespace DBDevelopService.Controllers /// /// /// - public Cdy.Tag.Tagbase RealTag { get; set; } + public WebApiRealTag RealTag { get; set; } /// /// @@ -37,5 +38,129 @@ namespace DBDevelopService.Controllers public Cdy.Tag.HisTag HisTag { get; set; } } + public class WebApiRealTag + { + public int Id { get; set; } + public string Name { get; set; } + public int Type { get; set; } + public string Group { get; set; } + public string Desc { get; set; } + public string LinkAddress { get; set; } + public int ReadWriteType { get; set; } + public string Convert { get; set; } + public double MaxValue { get; set; } + public double MinValue { get; set; } + public byte Precision { get; set; } + + /// + /// + /// + /// + /// + public static WebApiRealTag CreatFromTagbase(Tagbase realtag) + { + WebApiRealTag tag = new WebApiRealTag(); + tag.CloneFromRealTag(realtag); + return tag; + } + + /// + /// + /// + /// + public void CloneFromRealTag(Tagbase realtag) + { + this.Id = realtag.Id; + this.Name = realtag.Name; + this.Type = (byte)realtag.Type; + this.Group = realtag.Group; + this.Desc = realtag.Desc; + this.LinkAddress = realtag.LinkAddress; + this.ReadWriteType = (int)realtag.ReadWriteType; + this.Convert = realtag.Conveter != null ? realtag.Conveter.SeriseToString() : ""; + if(realtag is NumberTagBase) + { + this.MaxValue = (realtag as NumberTagBase).MaxValue; + this.MinValue = (realtag as NumberTagBase).MinValue; + } + if(realtag is FloatingTagBase) + { + this.Precision = (realtag as FloatingTagBase).Precision; + } + } + + public Tagbase ConvertToTagbase() + { + Cdy.Tag.Tagbase re = null; + switch (this.Type) + { + case (int)(Cdy.Tag.TagType.Bool): + re = new Cdy.Tag.BoolTag(); + break; + case (int)(Cdy.Tag.TagType.Byte): + re = new Cdy.Tag.ByteTag(); + break; + case (int)(Cdy.Tag.TagType.DateTime): + re = new Cdy.Tag.DateTimeTag(); + break; + case (int)(Cdy.Tag.TagType.Double): + re = new Cdy.Tag.DoubleTag(); + break; + case (int)(Cdy.Tag.TagType.Float): + re = new Cdy.Tag.FloatTag(); + break; + case (int)(Cdy.Tag.TagType.Int): + re = new Cdy.Tag.IntTag(); + break; + case (int)(Cdy.Tag.TagType.UInt): + re = new Cdy.Tag.UIntTag(); + break; + case (int)(Cdy.Tag.TagType.ULong): + re = new Cdy.Tag.ULongTag(); + break; + case (int)(Cdy.Tag.TagType.UShort): + re = new Cdy.Tag.UShortTag(); + break; + case (int)(Cdy.Tag.TagType.Long): + re = new Cdy.Tag.LongTag(); + break; + case (int)(Cdy.Tag.TagType.Short): + re = new Cdy.Tag.ShortTag(); + break; + case (int)(Cdy.Tag.TagType.String): + re = new Cdy.Tag.StringTag(); + break; + } + if (re != null) + { + re.Name = this.Name; + re.LinkAddress = this.LinkAddress; + re.Group = this.Group; + re.Desc = this.Desc; + re.Id = (int)this.Id; + re.ReadWriteType = (Cdy.Tag.ReadWriteMode)this.ReadWriteType; + if (!string.IsNullOrEmpty(this.Convert)) + { + re.Conveter = this.Convert.DeSeriseToValueConvert(); + } + if (re is Cdy.Tag.NumberTagBase) + { + (re as Cdy.Tag.NumberTagBase).MaxValue = this.MaxValue; + (re as Cdy.Tag.NumberTagBase).MinValue = this.MinValue; + } + + if (re is Cdy.Tag.FloatingTagBase) + { + (re as Cdy.Tag.FloatingTagBase).Precision = (byte)this.Precision; + } + } + + return re; + } + + + } + + } diff --git a/Develop/DBDevelopService/Controllers/DatabaseUser.cs b/Develop/DBDevelopService/Controllers/DatabaseUser.cs new file mode 100644 index 0000000..99f1299 --- /dev/null +++ b/Develop/DBDevelopService/Controllers/DatabaseUser.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace DBDevelopService.Controllers +{ + /// + /// + /// + public class WebApiUserGroup + { + public string Name { get; set; } + + /// + /// + /// + public string Parent { get; set; } + } + + /// + /// + /// + public class WebApiUserGroupRequest : WebApiDatabaseRequest + { + public string Name { get; set; } + + /// + /// + /// + public string Parent { get; set; } + } + + /// + /// + /// + public class WebApiMoveUserGroupRequest : WebApiDatabaseRequest + { + public string Name { get; set; } + + /// + /// + /// + public string OldParentName { get; set; } + + /// + /// + /// + public string NewParentName { get; set; } + } + + /// + /// + /// + public class WebApiRenameUserGroupRequest : WebApiDatabaseRequest + { + public string NewName { get; set; } + + /// + /// + /// + public string OldFullName { get; set; } + } + + /// + /// + /// + public class WebApiRequestByUserGroup:WebApiDatabaseRequest + { + public string GroupFullName { get; set; } + } + + + /// + /// + /// + public class WebApiNewDatabasePermissionRequest : WebApiDatabaseRequest + { + /// + /// + /// + public string Name { get; set; } + /// + /// + /// + public string Desc { get; set; } + + /// + /// + /// + public bool EnableWrite { get; set; } + + /// + /// + /// + public bool SuperPermission { get; set; } + + /// + /// 访问的变量 + /// + public List Group { get; set; } + + } + + /// + /// + /// + public class WebApiRemoveDatabasePermissionRequest : WebApiDatabaseRequest + { + public string Permission { get; set; } + } + + public class WebApiUserRequest : WebApiDatabaseRequest + { + public string UserName { get; set; } + } + + + public class WebApiUserAndPassword: WebApiUserRequest + { + + + public string Password { get; set; } + } + + /// + /// + /// + public class WebApiUserInfo : WebApiUserAndPassword + { + /// + /// + /// + public string Group { get; set; } + + /// + /// + /// + public List Permissions { get; set; } + + } + + public class WebApiUserInfoWithoutPassword : WebApiUserRequest + { + /// + /// + /// + public string Group { get; set; } + + /// + /// + /// + public List Permissions { get; set; } + + } + +} diff --git a/Develop/DBDevelopService/Controllers/DevelopServerController.cs b/Develop/DBDevelopService/Controllers/DevelopServerController.cs index d430508..7d0ab69 100644 --- a/Develop/DBDevelopService/Controllers/DevelopServerController.cs +++ b/Develop/DBDevelopService/Controllers/DevelopServerController.cs @@ -76,7 +76,6 @@ namespace DBDevelopService.Controllers private bool HasDeleteDatabasePerssion(string id) { return SecurityManager.Manager.CheckKeyAvaiable(id) && SecurityManager.Manager.HasDeleteDatabasePermission(id); - } #region database @@ -87,7 +86,7 @@ namespace DBDevelopService.Controllers /// /// [HttpPost] - public object NewDatabase([FromBody] NewDatabaseRequest request) + public object NewDatabase([FromBody] WebApiNewDatabaseRequest request) { if (!IsAdmin(request.Id) && !HasNewDatabasePermission(request.Id)) { @@ -114,18 +113,18 @@ namespace DBDevelopService.Controllers /// /// [HttpPost] - public object QueryDatabase([FromBody]RequestBase request) + public object QueryDatabase([FromBody] RequestBase request) { if (!CheckLoginId(request.Id)) { - return new ResultResponse() { ErroMsg = "权限不足",HasErro=true }; + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; } List re = new List(); foreach (var vv in DbManager.Instance.ListDatabase()) { - re.Add(new Database(){Name = vv, Desc = DbManager.Instance.GetDatabase(vv).Desc }); + re.Add(new Database() { Name = vv, Desc = DbManager.Instance.GetDatabase(vv).Desc }); } - return re; + return new ResultResponse() { Result = re }; } /// @@ -231,7 +230,119 @@ namespace DBDevelopService.Controllers } } } - return re; + return new ResultResponse() { Result = re }; + } + + + /// + /// + /// + /// + /// + /// + [HttpPost] + public object AddTagGroup(WebApiAddGroupRequest request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + string name = request.Name; + string parentName = request.ParentName; + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + lock (db) + { + var vtg = db.RealDatabase.Groups.ContainsKey(request.ParentName) ? db.RealDatabase.Groups[request.ParentName] : null; + + int i = 1; + while (db.RealDatabase.HasChildGroup(vtg, name)) + { + name = request.Name + i; + i++; + } + + string ntmp = name; + + if (!string.IsNullOrEmpty(parentName)) + { + name = parentName + "." + name; + } + + db.RealDatabase.CheckAndAddGroup(name); + return new ResultResponse() { Result = ntmp }; + } + } + return new ResultResponse() { ErroMsg = "数据库不存在", HasErro = true }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object RemoveTagGroup(WebApiRemoveGroupRequest request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + lock (db) + db.RealDatabase.RemoveGroup(request.FullName); + return new ResultResponse() { Result=true }; + } + return new ResultResponse() { ErroMsg = "数据库不存在", HasErro = true }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object RenameTagGroup(WebApiRenameGroupRequest request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + lock (db) + { + var re = db.RealDatabase.ChangeGroupName(request.OldFullName, request.Name); + return new ResultResponse() { Result = re }; + } + } + return new ResultResponse() { ErroMsg = "数据库不存在", HasErro = true }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object MoveTagGroup(WebApiMoveTagGroupRequest request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + lock (db) + db.RealDatabase.ChangeGroupParent(request.Name, request.OldParentName, request.NewParentName); + return new ResultResponse() { Result = true }; + } + return new ResultResponse() { ErroMsg = "数据库不存在", HasErro = true }; } /// @@ -321,7 +432,7 @@ namespace DBDevelopService.Controllers /// /// [HttpPost] - public object GetTagByGroup([FromBody] GetTagByGroupRequest request) + public object GetTagByGroup([FromBody] WebApiGetTagByGroupRequest request) { if (!CheckLoginId(request.Id, request.Database)) { @@ -339,7 +450,7 @@ namespace DBDevelopService.Controllers int from = request.Index * PageCount; var res = db.RealDatabase.ListAllTags().Where(e => e.Group == request.GroupName); - if (request.Filters.Count > 0) + if (request.Filters!=null && request.Filters.Count > 0) { res = FilterTags(db, res, request.Filters); } @@ -353,7 +464,7 @@ namespace DBDevelopService.Controllers { if (cc >= from && cc < (from + PageCount)) { - WebApiTag tag = new WebApiTag() { RealTag = vv }; + WebApiTag tag = new WebApiTag() { RealTag = WebApiRealTag.CreatFromTagbase(vv) }; if (db.HisDatabase.HisTags.ContainsKey(vv.Id)) { @@ -367,7 +478,7 @@ namespace DBDevelopService.Controllers } } } - return re; + return new ResultResponse() { Result = re }; } @@ -424,11 +535,11 @@ namespace DBDevelopService.Controllers { if (vv.RealTag.Id < 0) { - db.RealDatabase.Append(vv.RealTag); + db.RealDatabase.Append(vv.RealTag.ConvertToTagbase()); } else { - db.RealDatabase.AddOrUpdate(vv.RealTag); + db.RealDatabase.AddOrUpdate(vv.RealTag.ConvertToTagbase()); } var vtag = vv.HisTag; @@ -501,14 +612,15 @@ namespace DBDevelopService.Controllers { lock (db) { + var vtag = tag.ConvertToTagbase(); if (db.RealDatabase.Tags.ContainsKey(tag.Id) && tag.Id > -1) { - db.RealDatabase.UpdateById(tag.Id, tag); + db.RealDatabase.UpdateById(tag.Id, tag.ConvertToTagbase()); return new ResultResponse() { Result = true }; } - else if (db.RealDatabase.NamedTags.ContainsKey(tag.FullName)) + else if (db.RealDatabase.NamedTags.ContainsKey(vtag.FullName)) { - db.RealDatabase.Update(tag.FullName, tag); + db.RealDatabase.Update(vtag.FullName, vtag); return new ResultResponse() { Result = true }; } else @@ -545,7 +657,7 @@ namespace DBDevelopService.Controllers { lock (db) { - Cdy.Tag.Tagbase tag = request.Tag.RealTag; + Cdy.Tag.Tagbase tag = request.Tag.RealTag.ConvertToTagbase(); var vtag = request.Tag.HisTag; if (request.Mode == 0) { @@ -652,5 +764,502 @@ namespace DBDevelopService.Controllers } #endregion + + #region database user + + /// + /// + /// + /// + /// + [HttpPost] + public object AddDatabaseUserGroup([FromBody] WebApiUserGroupRequest request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + var user = new Cdy.Tag.UserGroup() { Name = request.Name }; + var usergroup = db.Security.User.GetUserGroup(request.Parent); + user.Parent = usergroup; + db.Security.User.AddUserGroup(user); + } + return new ResultResponse() { Result = true }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object GetDatabaseUserGroup([FromBody] WebApiDatabaseRequest request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + List re = new List(); + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + foreach (var vgg in db.Security.User.Groups) + { + re.Add(new WebApiUserGroup() { Name = vgg.Value.Name, Parent = vgg.Value.Parent != null ? vgg.Value.Parent.FullName : "" }); + } + } + return new ResultResponse() { Result = re }; + } + + /// + /// + /// + /// + /// + /// + [HttpPost] + public object MoveDatabaseUserGroup([FromBody] WebApiMoveUserGroupRequest request) + { + + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + string ofname = request.OldParentName + "." + request.Name; + var pgroup = db.Security.User.GetUserGroup(request.NewParentName); + + var usergroup = db.Security.User.GetUserGroup(ofname); + if (usergroup != null) + { + db.Security.User.RemoveUserGroup(ofname); + usergroup.Parent = pgroup; + db.Security.User.AddUserGroup(usergroup); + } + } + return new ResultResponse() { Result = true }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object RemoveDatabaseUserGroup([FromBody] WebApiRequestByUserGroup request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + var usergroup = db.Security.User.GetUserGroup(request.GroupFullName); + if (usergroup != null) + { + db.Security.User.RemoveUserGroup(usergroup.FullName); + } + } + return Task.FromResult(new BoolResultReplay() { Result = true }); + } + + /// + /// + /// + /// + /// + [HttpPost] + public object RenameDatabaseUserGroup([FromBody] WebApiRenameUserGroupRequest request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + var usergroup = db.Security.User.GetUserGroup(request.OldFullName); + if (usergroup != null) + { + usergroup.Name = request.NewName; + string sname = usergroup.FullName; + db.Security.User.RemoveUserGroup(request.OldFullName); + db.Security.User.AddUserGroup(usergroup); + } + } + return Task.FromResult(new BoolResultReplay() { Result = true }); + } + + /// + /// + /// + /// + /// + [HttpPost] + public object GetDatabaseUserByGroup([FromBody] WebApiRequestByUserGroup request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + + List re = new List(); + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + foreach (var vgg in db.Security.User.Users.Where(e => e.Value.Group == request.GroupFullName)) + { + var user = new WebApiUserInfoWithoutPassword() { UserName = vgg.Value.Name, Group = vgg.Value.Group }; + user.Permissions.AddRange(vgg.Value.Permissions); + re.Add(user); + } + } + return new ResultResponse() { Result = re }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object NewDatabaseUser([FromBody] WebApiUserInfo request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + var user = new Cdy.Tag.UserItem() { Name = request.UserName, Password = request.Password, Group = request.Group, Permissions = request.Permissions }; + db.Security.User.AddUser(user); + } + return new ResultResponse() { Result = true }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object UpdateDatabaseUser([FromBody] WebApiUserInfo request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + var uss = db.Security.User.Users; + if (uss.ContainsKey(request.UserName)) + { + var user = uss[request.UserName]; + user.Permissions = request.Permissions; + user.Group = request.Group; + } + else + { + var user = new Cdy.Tag.UserItem() { Name = request.UserName, Group = request.Group }; + user.Permissions = request.Permissions; + db.Security.User.AddUser(user); + } + } + return new ResultResponse() { Result = true }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object ModifyDatabaseUserPassword([FromBody] WebApiUserAndPassword request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + var uss = db.Security.User.Users; + if (uss.ContainsKey(request.UserName)) + { + uss[request.UserName].Password = request.Password; + } + } + return new ResultResponse() { Result = true }; + } + + /// + /// + /// + /// + /// + /// + [HttpPost] + public object RemoveDatabaseUser([FromBody] WebApiUserRequest request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + var uss = db.Security.User.Users; + if (uss.ContainsKey(request.UserName)) + { + db.Security.User.RemoveUser(request.UserName); + } + } + return new ResultResponse() { Result = true }; + } + + + + /// + /// + /// + /// + /// + [HttpPost] + public object NewDatabasePermission([FromBody] WebApiNewDatabasePermissionRequest request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + var pers = new Cdy.Tag.UserPermission() { Name = request.Name, Desc = request.Desc, EnableWrite = request.EnableWrite,SuperPermission = request.SuperPermission }; + pers.Group.AddRange(request.Group); + db.Security.Permission.Add(pers); + } + return new ResultResponse() { Result = true }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object RemoveDatabasePermission([FromBody] WebApiRemoveDatabasePermissionRequest request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + if (db.Security.Permission.Permissions.ContainsKey(request.Permission)) + { + db.Security.Permission.Permissions.Remove(request.Permission); + } + } + return new ResultResponse() { Result = true }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object UpdateDatabasePermission([FromBody] WebApiNewDatabasePermissionRequest request) + { + if (!CheckLoginId(request.Id, request.Database)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var db = DbManager.Instance.GetDatabase(request.Database); + if (db != null) + { + if (db.Security.Permission.Permissions.ContainsKey(request.Name)) + { + var pp = db.Security.Permission.Permissions[request.Name]; + pp.Group = request.Group.ToList(); + pp.EnableWrite = request.EnableWrite; + pp.Desc = request.Desc; + pp.SuperPermission = request.SuperPermission; + } + else + { + var pp = new Cdy.Tag.UserPermission() { Name = request.Name, Desc = request.Desc, EnableWrite = request.EnableWrite,SuperPermission=request.SuperPermission }; + pp.Group.AddRange(request.Group); + db.Security.Permission.Add(pp); + } + } + return new ResultResponse() { Result = true }; + } + + #endregion + + #region System User + + /// + /// + /// + /// + /// + [HttpPost] + public object NewUser([FromBody] WebApiNewSystemUserRequest request) + { + if (!IsAdmin(request.Id)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var user = new User() { Name = request.UserName, Password = request.Password }; + var re = SecurityManager.Manager.Securitys.User.AddUser(user); + SecurityManager.Manager.Save(); + return new ResultResponse() { Result = re }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object ReNameUser([FromBody] WebApiReNameSystemUserRequest request) + { + if (!IsAdmin(request.Id)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + bool re = SecurityManager.Manager.Securitys.User.RenameUser(request.OldName, request.NewName); + SecurityManager.Manager.RenameLoginUser(request.OldName, request.NewName); + SecurityManager.Manager.Save(); + return new ResultResponse() { Result = re }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object ModifyPassword([FromBody] WebApiModifySystemUserPasswordRequest request) + { + var userName = SecurityManager.Manager.GetUserName(request.Id); + if (!SecurityManager.Manager.CheckKeyAvaiable(request.Id)) + { + if (!(userName == request.UserName && SecurityManager.Manager.CheckPasswordIsCorrect(userName, request.Password))) + { + return Task.FromResult(new BoolResultReplay() { Result = false }); + } + } + var user = SecurityManager.Manager.Securitys.User.GetUser(request.UserName); + if (user != null) + { + user.Password = request.NewPassword; + SecurityManager.Manager.Save(); + } + return new ResultResponse() { Result = true }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object UpdateUser([FromBody] WebApiUpdateSystemUserRequest request) + { + if (!IsAdmin(request.Id)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var user = SecurityManager.Manager.Securitys.User.GetUser(request.UserName); + if (user != null) + { + user.IsAdmin = request.IsAdmin; + user.NewDatabase = request.NewDatabasePermission; + user.Databases = request.Databases; + SecurityManager.Manager.Save(); + } + + return new ResultResponse() { Result = true }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object UpdateUserPassword([FromBody] WebApiNewSystemUserRequest request) + { + if (!IsAdmin(request.Id)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var user = SecurityManager.Manager.Securitys.User.GetUser(request.UserName); + if (user != null) + { + user.Password = request.Password; + SecurityManager.Manager.Save(); + } + return new ResultResponse() { Result = true }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object GetUsers([FromBody] RequestBase request) + { + if (!IsAdmin(request.Id)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + + List re = new List(); + foreach (var vv in SecurityManager.Manager.Securitys.User.Users) + { + var user = new WebApiSystemUserItem() { UserName = vv.Value.Name, IsAdmin = vv.Value.IsAdmin, NewDatabase = vv.Value.NewDatabase }; + if (vv.Value.Databases != null) + user.Databases.AddRange(vv.Value.Databases); + re.Add(user); + } + return new ResultResponse() { Result = re }; + } + + /// + /// + /// + /// + /// + [HttpPost] + public object RemoveUser([FromBody] WebApiRemoveSystemUserRequest request) + { + if (!IsAdmin(request.Id)) + { + return new ResultResponse() { ErroMsg = "权限不足", HasErro = true }; + } + var user = SecurityManager.Manager.Securitys.User.GetUser(request.UserName); + if (user != null) + { + SecurityManager.Manager.Securitys.User.RemoveUser(request.UserName); + SecurityManager.Manager.Save(); + } + return new ResultResponse() { Result = true }; + } + + #endregion } } diff --git a/Develop/DBDevelopService/Controllers/RequestBase.cs b/Develop/DBDevelopService/Controllers/RequestBase.cs index 7f5dcff..9a79cdd 100644 --- a/Develop/DBDevelopService/Controllers/RequestBase.cs +++ b/Develop/DBDevelopService/Controllers/RequestBase.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; namespace DBDevelopService.Controllers { + public class RequestBase { public string Id { get; set; } @@ -66,7 +67,7 @@ namespace DBDevelopService.Controllers /// /// /// - public class NewDatabaseRequest : WebApiDatabaseRequest + public class WebApiNewDatabaseRequest : WebApiDatabaseRequest { /// /// @@ -78,7 +79,7 @@ namespace DBDevelopService.Controllers /// /// /// - public class GetTagByGroupRequest : WebApiDatabaseRequest + public class WebApiGetTagByGroupRequest : WebApiDatabaseRequest { /// /// @@ -96,6 +97,60 @@ namespace DBDevelopService.Controllers public int Index { get; set; } } + /// + /// + /// + public class WebApiAddGroupRequest : WebApiDatabaseRequest + { + public string Name { get; set; } + /// + /// + /// + public string ParentName { get; set; } + } + + /// + /// + /// + public class WebApiRemoveGroupRequest : WebApiDatabaseRequest + { + public string FullName { get; set; } + } + + /// + /// + /// + public class WebApiRenameGroupRequest : WebApiDatabaseRequest + { + public string Name { get; set; } + /// + /// + /// + public string OldFullName { get; set; } + } + + /// + /// + /// + public class WebApiMoveTagGroupRequest : WebApiDatabaseRequest + { + /// + /// + /// + public string Name { get; set; } + + /// + /// + /// + public string NewParentName { get; set; } + + /// + /// + /// + public string OldParentName { get; set; } + } + + /// /// /// diff --git a/Develop/DBDevelopService/Controllers/SystemUser.cs b/Develop/DBDevelopService/Controllers/SystemUser.cs new file mode 100644 index 0000000..6779e78 --- /dev/null +++ b/Develop/DBDevelopService/Controllers/SystemUser.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace DBDevelopService.Controllers +{ + public class WebApiNewSystemUserRequest: RequestBase + { + + #region ... Variables ... + + #endregion ...Variables... + + #region ... Events ... + + #endregion ...Events... + + #region ... Constructor... + + #endregion ...Constructor... + + #region ... Properties ... + public string UserName { get; set; } + + /// + /// + /// + public string Password { get; set; } + #endregion ...Properties... + + #region ... Methods ... + + #endregion ...Methods... + + #region ... Interfaces ... + + #endregion ...Interfaces... + } + + public class WebApiReNameSystemUserRequest : RequestBase + { + public string OldName { get; set; } + public string NewName { get; set; } + } + + public class WebApiModifySystemUserPasswordRequest : RequestBase + { + public string UserName { get; set; } + public string Password { get; set; } + public string NewPassword { get; set; } + } + + + public class WebApiUpdateSystemUserRequest : RequestBase + { + public string UserName { get; set; } + public bool IsAdmin { get; set; } + public bool NewDatabasePermission { get; set; } + public List Databases { get; set; } + } + + /// + /// + /// + public class WebApiSystemUserItem + { + public string UserName { get; set; } + public bool IsAdmin { get; set; } + public bool NewDatabase { get; set; } + public List Databases { get; set; } + } + + /// + /// + /// + public class WebApiRemoveSystemUserRequest : WebApiDatabaseRequest + { + public string UserName { get; set; } + } + +} diff --git a/Develop/DBDevelopService/Security/UserDocument.cs b/Develop/DBDevelopService/Security/UserDocument.cs index cbae09d..79c5c18 100644 --- a/Develop/DBDevelopService/Security/UserDocument.cs +++ b/Develop/DBDevelopService/Security/UserDocument.cs @@ -91,13 +91,14 @@ namespace DBDevelopService /// /// /// - public void AddUser(User user) + public bool AddUser(User user) { if(!mUsers.ContainsKey(user.Name)) { mUsers.Add(user.Name, user); + return true; } - + return false; } /// diff --git a/Develop/DBDevelopService/Services/DevelopServerService.cs b/Develop/DBDevelopService/Services/DevelopServerService.cs index ee9cc9c..ea8d646 100644 --- a/Develop/DBDevelopService/Services/DevelopServerService.cs +++ b/Develop/DBDevelopService/Services/DevelopServerService.cs @@ -448,7 +448,7 @@ namespace DBDevelopService var usergroup = db.Security.User.GetUserGroup(request.Name); if(usergroup!=null) { - db.Security.User.RemoveUserGroup(usergroup.Name); + db.Security.User.RemoveUserGroup(usergroup.FullName); } } return Task.FromResult(new BoolResultReplay() { Result = true }); @@ -1413,7 +1413,7 @@ namespace DBDevelopService } /// - /// + /// ijб /// /// /// diff --git a/Develop/DBStudio/Properties/launchSettings.json b/Develop/DBStudio/Properties/launchSettings.json index 814c42b..bd846d8 100644 --- a/Develop/DBStudio/Properties/launchSettings.json +++ b/Develop/DBStudio/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "DBInStudioServer": { "commandName": "Executable", - "executablePath": "C:\\Users\\cdy81\\source\\repos\\mars\\Output\\DBInStudioServer.exe" + "executablePath": "C:\\Users\\chongdaoyang\\source\\repos\\mars\\Output\\DBInStudioServer.exe" } } } \ No newline at end of file diff --git a/Example/Develop/DevelopWebApiDemo/MainWindow.xaml b/Example/Develop/DevelopWebApiDemo/MainWindow.xaml index 82a919d..501c280 100644 --- a/Example/Develop/DevelopWebApiDemo/MainWindow.xaml +++ b/Example/Develop/DevelopWebApiDemo/MainWindow.xaml @@ -14,6 +14,12 @@