diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/AccountController.cs b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/AccountController.cs index 81d19655..a029f36a 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/AccountController.cs +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/AccountController.cs @@ -40,7 +40,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers public async Task Login(user _user) { var user_data = await _userService.Login(_user); - var menuList = await _userService.GetMenusByUser(user_data); + var menuList = await _menuService.GetTopMenuByUserId(user_data.id); if ( user_data!=null) { var token = MakeJwt.app(new jwtUser() {user=user_data,menuIds= menuList}); @@ -112,9 +112,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpPut] [Authorize] public async Task ChangePassword(ChangePwdDto pwdDto) - { - var uid= pwdDto.user.id; - var user_data = await _userService.GetUserById(uid); + { + var user_data = await _userService.GetUserById(pwdDto.user.id); string msg = "修改成功"; if (! string.IsNullOrEmpty( pwdDto.newPassword)) { diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/MenuController.cs b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/MenuController.cs index c377a2f7..f9f16a99 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/MenuController.cs +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/MenuController.cs @@ -31,7 +31,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers /// [HttpGet] public async Task GetMenuInMould() - { + { + return Result.Success().SetData(await _menuService.GetMenuInMould()); } /// @@ -68,6 +69,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpPost] public async Task AddTopMenu(menu _menu) { + await _menuService.AddTopMenu(_menu); + return Result.Success(); } /// @@ -79,6 +82,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpPost] public async Task SetMouldByMenu(IdDto idDto) { + await _menuService.SetMouldByMenu(idDto.id1, idDto.id2); + return Result.Success(); } @@ -90,6 +95,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpPost] public async Task AddChildrenMenu(ChildrenDto childrenDto) { + await _menuService.AddChildrenMenu(childrenDto.parentId, childrenDto.data); + return Result.Success(); } /// @@ -100,6 +107,9 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpGet] public async Task GetTopMenusByHttpUser() { + HttpContext.GetCurrentUserInfo(out List menuIds); + + return Result.Success().SetData(await _menuService.GetTopMenusByTopMenuIds(menuIds)); } } } diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/RoleController.cs b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/RoleController.cs index a32de49f..de30f72d 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/RoleController.cs +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/RoleController.cs @@ -65,6 +65,17 @@ namespace Yi.Framework.ApiMicroservice.Controllers return Result.Success(); } + /// + /// 根据用户id得到该用户有哪些角色 + /// 用于显示用户详情中的角色说明 + /// + /// + [HttpGet] + public async Task GetRolesByUserId(int userId) + { + + return Result.Success().SetData(await _roleService.GetRolesByUserId(userId)); + } /// /// 给角色设置菜单,多个角色与多个菜单,让每一个角色都设置,ids1为角色,ids2为菜单 /// 用于设置角色 @@ -74,6 +85,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpPost] public async Task SetMenuByRole(IdsListDto idsListDto) { + await _roleService.SetMenusByRolesId(idsListDto.ids2, idsListDto.ids1); + return Result.Success(); } /// /// 用于给角色设置菜单的时候,点击一个角色,显示这个角色拥有的并列的菜单 @@ -83,6 +96,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpGet] public async Task GetTopMenusByRoleId(int roleId) { + return Result.Success().SetData(await _roleService.GetTopMenusByRoleId(roleId) ); ; } } } diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs index ceb88cb8..f8eb206a 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs @@ -120,8 +120,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpGet] public async Task GetAxiosByRouter(string router) { - var _user = HttpContext.GetCurrentUserInfo(out List ids); - var menuList= await _userService.GetAxiosByRouter(router, _user.id, ids); + var _user = HttpContext.GetCurrentUserInfo(out List menuIds); + var menuList= await _userService.GetAxiosByRouter(router, _user.id, menuIds); AxiosUrlsModel urlsModel = new(); menuList.ForEach(u => { diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/appsettings.json b/Yi.Framework/Yi.Framework.ApiMicroservice/appsettings.json index 6416d435..fbc284ac 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/appsettings.json +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/appsettings.json @@ -17,8 +17,8 @@ "RabbitMQ_Enabled": false, "Redis_Enabled": false, "Kafka_Enabled": false, - "MutiDB_Enabled": true, - "DbList": [ "Sqlite", "Mysql", "Sqlserver","Oracle"], + "MutiDB_Enabled": false, + "DbList": [ "Sqlite", "Mysql", "Sqlserver", "Oracle" ], "DbSelect": "Mysql", "DbConn": { diff --git a/Yi.Framework/Yi.Framework.Interface/IMenuService.cs b/Yi.Framework/Yi.Framework.Interface/IMenuService.cs index 4e7e7357..aafce7e3 100644 --- a/Yi.Framework/Yi.Framework.Interface/IMenuService.cs +++ b/Yi.Framework/Yi.Framework.Interface/IMenuService.cs @@ -9,57 +9,35 @@ namespace Yi.Framework.Interface { public partial interface IMenuService:IBaseService { - Task DelListByUpdateAsync(List _ids); /// - /// 获取所有菜单 + /// 获取所有菜单,关联接口 + /// 这个是要递归的,但是要过滤掉删除的,所以,可以写一个通用过滤掉删除的方法 /// /// - Task> GetAllEntitiesTrueAsync(); - + Task GetMenuInMould(); /// - /// 通过menu得到mould(1对1关系) + /// 增 + /// 现在,top菜单只允许为一个 /// - /// /// - Task GetMouldByMenu(menu _menu); - + Task AddTopMenu(menu _menu); /// - /// 通过menu得到他自己与mould(注意:确保返回的menu里含有mould) + /// 给一个菜单设置一个接口,Id1为菜单id,Id2为接口id + /// 用于给菜单设置接口 /// - /// /// - Task GetMenuMouldByMenu(menu _menu); - + Task SetMouldByMenu(int id1, int id2); /// - /// 得到该菜单下所有的子类 + /// 给一个菜单添加子节点(注意:添加,不是覆盖) /// - /// - /// - Task> GetChildrenByMenu(menu _menu); - - /// - /// 给菜单设置接口(1对1关系) - /// - /// - /// - /// - Task SetMouldByMenu(int mouldId,int menuId); - /// - /// 添加子菜单 - /// - /// /// Task AddChildrenMenu(int menu_id, menu _children); /// - /// 获取根目录菜单 + /// 获取用户的目录菜单,不包含接口 + /// 用于账户信息页面,显示这个用户有哪些菜单,需要并列 /// /// - Task> GetTopMenu(); - /// - /// 获取子菜单 - /// - /// - Task> GetChildrenMenu(menu _menu); - Task> GetMenuMould(); + Task> GetTopMenusByTopMenuIds(List menuIds); + Task> GetTopMenuByUserId(int userId); } } diff --git a/Yi.Framework/Yi.Framework.Interface/IMouldService.cs b/Yi.Framework/Yi.Framework.Interface/IMouldService.cs index 905a6bca..a9708a21 100644 --- a/Yi.Framework/Yi.Framework.Interface/IMouldService.cs +++ b/Yi.Framework/Yi.Framework.Interface/IMouldService.cs @@ -9,8 +9,7 @@ namespace Yi.Framework.Interface { public partial interface IMouldService : IBaseService { - Task DelListByUpdateAsync(List _ids); - Task> GetAllEntitiesTrueAsync(); + /// /// 得到该接口属于哪个菜单的 diff --git a/Yi.Framework/Yi.Framework.Interface/IRoleService.cs b/Yi.Framework/Yi.Framework.Interface/IRoleService.cs index 24cf4081..5b0ea14e 100644 --- a/Yi.Framework/Yi.Framework.Interface/IRoleService.cs +++ b/Yi.Framework/Yi.Framework.Interface/IRoleService.cs @@ -9,22 +9,13 @@ namespace Yi.Framework.Interface { public partial interface IRoleService:IBaseService { - Task DelListByUpdateAsync(List _ids); - Task> GetAllEntitiesTrueAsync(); /// /// 获取该角色的所有菜单 /// - /// + /// /// - Task> GetMenusByRole(role _role); - - /// - /// 获取含有该角色的所有用户 - /// - /// - /// - Task> GetUsersByRole(role _role); + Task> GetMenusByRole(int roleId); /// /// 给多个角色设置多个菜单 @@ -38,7 +29,19 @@ namespace Yi.Framework.Interface /// /// /// - Task> GetMenusByRoleId(int roleId); - + Task> GetMenusByRoleId(List roleIds); + /// + /// 获取用户的角色 + /// + /// + /// + Task> GetRolesByUserId(int userId); + /// + /// 获取该角色的top菜单 + /// + /// + /// + Task> GetTopMenusByRoleId(int roleId); + } } diff --git a/Yi.Framework/Yi.Framework.Model/DataContext.cs b/Yi.Framework/Yi.Framework.Model/DataContext.cs index c5285d45..12166072 100644 --- a/Yi.Framework/Yi.Framework.Model/DataContext.cs +++ b/Yi.Framework/Yi.Framework.Model/DataContext.cs @@ -28,6 +28,8 @@ namespace Yi.Framework.Model _connStr = connstr; return this; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) diff --git a/Yi.Framework/Yi.Framework.Model/Migrations/20211029124310_yi-2.Designer.cs b/Yi.Framework/Yi.Framework.Model/Migrations/20211029124310_yi-2.Designer.cs new file mode 100644 index 00000000..dc624af6 --- /dev/null +++ b/Yi.Framework/Yi.Framework.Model/Migrations/20211029124310_yi-2.Designer.cs @@ -0,0 +1,199 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Yi.Framework.Model; + +namespace Yi.Framework.Model.Migrations +{ + [DbContext(typeof(DataContext))] + [Migration("20211029124310_yi-2")] + partial class yi2 + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 64) + .HasAnnotation("ProductVersion", "5.0.11"); + + modelBuilder.Entity("Yi.Framework.Model.Models.menu", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("icon") + .HasColumnType("longtext"); + + b.Property("is_delete") + .HasColumnType("int"); + + b.Property("is_show") + .HasColumnType("int"); + + b.Property("is_top") + .HasColumnType("int"); + + b.Property("menu_name") + .HasColumnType("longtext"); + + b.Property("menuid") + .HasColumnType("int"); + + b.Property("mouldid") + .HasColumnType("int"); + + b.Property("roleid") + .HasColumnType("int"); + + b.Property("router") + .HasColumnType("longtext"); + + b.Property("sort") + .HasColumnType("int"); + + b.HasKey("id"); + + b.HasIndex("menuid"); + + b.HasIndex("mouldid"); + + b.HasIndex("roleid"); + + b.ToTable("menu"); + }); + + modelBuilder.Entity("Yi.Framework.Model.Models.mould", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("is_delete") + .HasColumnType("int"); + + b.Property("mould_name") + .HasColumnType("longtext"); + + b.Property("url") + .HasColumnType("longtext"); + + b.HasKey("id"); + + b.ToTable("mould"); + }); + + modelBuilder.Entity("Yi.Framework.Model.Models.role", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("introduce") + .HasColumnType("longtext"); + + b.Property("is_delete") + .HasColumnType("int"); + + b.Property("role_name") + .HasColumnType("longtext"); + + b.Property("userid") + .HasColumnType("int"); + + b.HasKey("id"); + + b.HasIndex("userid"); + + b.ToTable("role"); + }); + + modelBuilder.Entity("Yi.Framework.Model.Models.user", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("address") + .HasColumnType("longtext"); + + b.Property("age") + .HasColumnType("int"); + + b.Property("email") + .HasColumnType("longtext"); + + b.Property("icon") + .HasColumnType("longtext"); + + b.Property("introduction") + .HasColumnType("longtext"); + + b.Property("ip") + .HasColumnType("longtext"); + + b.Property("is_delete") + .HasColumnType("int"); + + b.Property("nick") + .HasColumnType("longtext"); + + b.Property("password") + .HasColumnType("longtext"); + + b.Property("phone") + .HasColumnType("int"); + + b.Property("username") + .HasColumnType("longtext"); + + b.HasKey("id"); + + b.ToTable("user"); + }); + + modelBuilder.Entity("Yi.Framework.Model.Models.menu", b => + { + b.HasOne("Yi.Framework.Model.Models.menu", null) + .WithMany("children") + .HasForeignKey("menuid"); + + b.HasOne("Yi.Framework.Model.Models.mould", "mould") + .WithMany() + .HasForeignKey("mouldid"); + + b.HasOne("Yi.Framework.Model.Models.role", null) + .WithMany("menus") + .HasForeignKey("roleid"); + + b.Navigation("mould"); + }); + + modelBuilder.Entity("Yi.Framework.Model.Models.role", b => + { + b.HasOne("Yi.Framework.Model.Models.user", null) + .WithMany("roles") + .HasForeignKey("userid"); + }); + + modelBuilder.Entity("Yi.Framework.Model.Models.menu", b => + { + b.Navigation("children"); + }); + + modelBuilder.Entity("Yi.Framework.Model.Models.role", b => + { + b.Navigation("menus"); + }); + + modelBuilder.Entity("Yi.Framework.Model.Models.user", b => + { + b.Navigation("roles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Yi.Framework/Yi.Framework.Model/Migrations/20211029124310_yi-2.cs b/Yi.Framework/Yi.Framework.Model/Migrations/20211029124310_yi-2.cs new file mode 100644 index 00000000..40b079f1 --- /dev/null +++ b/Yi.Framework/Yi.Framework.Model/Migrations/20211029124310_yi-2.cs @@ -0,0 +1,141 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Yi.Framework.Model.Migrations +{ + public partial class yi2 : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "menurole"); + + migrationBuilder.DropTable( + name: "roleuser"); + + migrationBuilder.AddColumn( + name: "userid", + table: "role", + type: "int", + nullable: true); + + migrationBuilder.AddColumn( + name: "roleid", + table: "menu", + type: "int", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_role_userid", + table: "role", + column: "userid"); + + migrationBuilder.CreateIndex( + name: "IX_menu_roleid", + table: "menu", + column: "roleid"); + + migrationBuilder.AddForeignKey( + name: "FK_menu_role_roleid", + table: "menu", + column: "roleid", + principalTable: "role", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_role_user_userid", + table: "role", + column: "userid", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_menu_role_roleid", + table: "menu"); + + migrationBuilder.DropForeignKey( + name: "FK_role_user_userid", + table: "role"); + + migrationBuilder.DropIndex( + name: "IX_role_userid", + table: "role"); + + migrationBuilder.DropIndex( + name: "IX_menu_roleid", + table: "menu"); + + migrationBuilder.DropColumn( + name: "userid", + table: "role"); + + migrationBuilder.DropColumn( + name: "roleid", + table: "menu"); + + migrationBuilder.CreateTable( + name: "menurole", + columns: table => new + { + menusid = table.Column(type: "int", nullable: false), + rolesid = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_menurole", x => new { x.menusid, x.rolesid }); + table.ForeignKey( + name: "FK_menurole_menu_menusid", + column: x => x.menusid, + principalTable: "menu", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_menurole_role_rolesid", + column: x => x.rolesid, + principalTable: "role", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "roleuser", + columns: table => new + { + rolesid = table.Column(type: "int", nullable: false), + usersid = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_roleuser", x => new { x.rolesid, x.usersid }); + table.ForeignKey( + name: "FK_roleuser_role_rolesid", + column: x => x.rolesid, + principalTable: "role", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_roleuser_user_usersid", + column: x => x.usersid, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_menurole_rolesid", + table: "menurole", + column: "rolesid"); + + migrationBuilder.CreateIndex( + name: "IX_roleuser_usersid", + table: "roleuser", + column: "usersid"); + } + } +} diff --git a/Yi.Framework/Yi.Framework.Model/Migrations/DataContextModelSnapshot.cs b/Yi.Framework/Yi.Framework.Model/Migrations/DataContextModelSnapshot.cs index af015d91..aade8592 100644 --- a/Yi.Framework/Yi.Framework.Model/Migrations/DataContextModelSnapshot.cs +++ b/Yi.Framework/Yi.Framework.Model/Migrations/DataContextModelSnapshot.cs @@ -44,6 +44,9 @@ namespace Yi.Framework.Model.Migrations b.Property("mouldid") .HasColumnType("int"); + b.Property("roleid") + .HasColumnType("int"); + b.Property("router") .HasColumnType("longtext"); @@ -56,6 +59,8 @@ namespace Yi.Framework.Model.Migrations b.HasIndex("mouldid"); + b.HasIndex("roleid"); + b.ToTable("menu"); }); @@ -94,8 +99,13 @@ namespace Yi.Framework.Model.Migrations b.Property("role_name") .HasColumnType("longtext"); + b.Property("userid") + .HasColumnType("int"); + b.HasKey("id"); + b.HasIndex("userid"); + b.ToTable("role"); }); @@ -143,36 +153,6 @@ namespace Yi.Framework.Model.Migrations b.ToTable("user"); }); - modelBuilder.Entity("menurole", b => - { - b.Property("menusid") - .HasColumnType("int"); - - b.Property("rolesid") - .HasColumnType("int"); - - b.HasKey("menusid", "rolesid"); - - b.HasIndex("rolesid"); - - b.ToTable("menurole"); - }); - - modelBuilder.Entity("roleuser", b => - { - b.Property("rolesid") - .HasColumnType("int"); - - b.Property("usersid") - .HasColumnType("int"); - - b.HasKey("rolesid", "usersid"); - - b.HasIndex("usersid"); - - b.ToTable("roleuser"); - }); - modelBuilder.Entity("Yi.Framework.Model.Models.menu", b => { b.HasOne("Yi.Framework.Model.Models.menu", null) @@ -183,43 +163,34 @@ namespace Yi.Framework.Model.Migrations .WithMany() .HasForeignKey("mouldid"); + b.HasOne("Yi.Framework.Model.Models.role", null) + .WithMany("menus") + .HasForeignKey("roleid"); + b.Navigation("mould"); }); - modelBuilder.Entity("menurole", b => + modelBuilder.Entity("Yi.Framework.Model.Models.role", b => { - b.HasOne("Yi.Framework.Model.Models.menu", null) - .WithMany() - .HasForeignKey("menusid") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Yi.Framework.Model.Models.role", null) - .WithMany() - .HasForeignKey("rolesid") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("roleuser", b => - { - b.HasOne("Yi.Framework.Model.Models.role", null) - .WithMany() - .HasForeignKey("rolesid") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - b.HasOne("Yi.Framework.Model.Models.user", null) - .WithMany() - .HasForeignKey("usersid") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .WithMany("roles") + .HasForeignKey("userid"); }); modelBuilder.Entity("Yi.Framework.Model.Models.menu", b => { b.Navigation("children"); }); + + modelBuilder.Entity("Yi.Framework.Model.Models.role", b => + { + b.Navigation("menus"); + }); + + modelBuilder.Entity("Yi.Framework.Model.Models.user", b => + { + b.Navigation("roles"); + }); #pragma warning restore 612, 618 } } diff --git a/Yi.Framework/Yi.Framework.Service/MenuService.cs b/Yi.Framework/Yi.Framework.Service/MenuService.cs index 7b128389..99210c3d 100644 --- a/Yi.Framework/Yi.Framework.Service/MenuService.cs +++ b/Yi.Framework/Yi.Framework.Service/MenuService.cs @@ -11,118 +11,74 @@ namespace Yi.Framework.Service { public partial class MenuService:BaseService, IMenuService { + short Normal = (short)Common.Enum.DelFlagEnum.Normal; public async Task AddChildrenMenu(int menu_id, menu _children) { - var menu_data = await _Db.Set().Include(u => u.children).Where(u => u.id == menu_id).FirstOrDefaultAsync(); + var menu_data = await _DbRead.Set().Include(u => u.children).Where(u => u.id == menu_id).FirstOrDefaultAsync(); _children.is_top = (short)Common.Enum.TopFlagEnum.Children; menu_data.children.Add(_children); await UpdateAsync(menu_data); return menu_data; } - /// - /// 这个getEntity没有关联子类,怎么能得到子类呢?这是一个错误的接口 - /// - /// - /// - public async Task> GetChildrenByMenu(menu _menu) + public async Task AddTopMenu(menu _menu) { - var menu_data = await GetEntity(u=>u.id==_menu.id&& u.is_delete == (short)Common.Enum.DelFlagEnum.Normal); - var childrenList = menu_data.children.ToList(); - return childrenList; + _menu.is_top = (short)Common.Enum.TopFlagEnum.Children; + + return await AddAsync(_menu); } - /// - /// 不要返回一个新创的变量,直接返回menu.children,只要id,就不要传一个对象 - /// - /// - /// - public async Task> GetChildrenMenu(menu _menu) + public async Task GetMenuInMould() { - var menu= await _Db.Set().Include(u => u.children).Include(u=>u.mould) - .Where(u =>u.id==_menu.id&& u.is_top == (short)Common.Enum.TopFlagEnum.Children ) - .FirstOrDefaultAsync(); - var childrenList = menu.children.ToList(); - return childrenList; - } - - public async Task> GetMenuMould() - { - var menuList= await _Db.Set().Include(u => u.children).Include(u => u.mould) - .Where(u => u.is_delete == (short)Common.Enum.DelFlagEnum.Normal ) - .ToListAsync(); - return menuList; - } - - /// - /// 和GetChildrenMenu方法可以合并 - /// - /// - /// - public async Task GetMenuMouldByMenu(menu _menu) - { - var menu_data = await _Db.Set().Include(u => u.children).Include(u=>u.mould) - .Where(u=>u.id==_menu.id&& u.is_delete == (short)Common.Enum.ShowFlagEnum.Show) - .FirstOrDefaultAsync(); - return menu_data; - } - - public async Task GetMouldByMenu(menu _menu) - { - var menu_data =await _Db.Set().Include(u => u.mould).Where(u => u.id == _menu.id).FirstOrDefaultAsync(); - return menu_data.mould; - } - - /// - /// 5层迭代 - /// - /// - public async Task> GetTopMenu() - { - var menu_data= await _Db.Set().Include(u=>u.mould) + var menu_data= await _DbRead.Set().Include(u=>u.mould) .Include(u => u.children).ThenInclude(u => u.mould) .Include(u=>u.children).ThenInclude(u => u.children).ThenInclude(u => u.mould) .Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.mould) .Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.mould) - .Where(u =>u.is_delete == (short)Common.Enum.DelFlagEnum.Normal && u.is_top == (short)Common.Enum.ShowFlagEnum.Show) + .Where(u =>u.is_delete == Normal && u.is_show == (short)Common.Enum.ShowFlagEnum.Show && u.is_top == (short)Common.Enum.TopFlagEnum.Top) .OrderByDescending(u=>u.sort) - .ToListAsync(); + .FirstOrDefaultAsync(); return TopMenuBuild(menu_data); } + + public async Task> GetTopMenusByHttpUser(List menuIds) + { + return await _DbRead.Set().Where(u => menuIds.Contains(u.id)).ToListAsync(); + } + + public async Task SetMouldByMenu(int id1,int id2) + { + var menu_data = await _DbRead.Set().Include(u => u.mould).Where(u => u.id == id1).FirstOrDefaultAsync(); + var mould_data = await _DbRead.Set().Where(u => u.id == id1).FirstOrDefaultAsync(); + menu_data.mould = mould_data; + _Db.Update(menu_data); + return menu_data; + } + /// /// 过滤已经被删除的(这个应该是别的地方有方法的,不应该写到service层里面的) /// /// /// - private List TopMenuBuild(List menu_data) + private menu TopMenuBuild(menu menu_data) { - for(int i = menu_data.Count()-1; i >=0; i--) + for (int i = menu_data.children.Count() - 1; i >= 0; i--) { - if(menu_data[i].is_delete == (short)Common.Enum.DelFlagEnum.Deleted) + if (menu_data.children[i].is_delete == (short)Common.Enum.DelFlagEnum.Deleted) { - menu_data.Remove(menu_data[i]); + menu_data.children.Remove(menu_data.children[i]); + } + else if (menu_data.children[i] != null) + { + TopMenuBuild(menu_data.children[i]); } - else if(menu_data[i].children != null) - { - menu_data[i].children= TopMenuBuild(menu_data[i].children.ToList()); - } } return menu_data; } - - /// - /// 要关联啊,menudata要关联mould,而且能用find就用find - /// - /// - /// - /// - public async Task SetMouldByMenu(int mouldId, int menuId) + public async Task> GetTopMenuByUserId(int userId) { - var menu_data = await GetEntity(u => u.id == menuId); - var mould_data = await _Db.Set().Where(u => u.id==mouldId).FirstOrDefaultAsync(); - menu_data.mould = mould_data; - return await UpdateAsync(menu_data); + throw new Exception(); } - + } } diff --git a/Yi.Framework/Yi.Framework.Service/RoleService.cs b/Yi.Framework/Yi.Framework.Service/RoleService.cs index 8419a069..3e0389ac 100644 --- a/Yi.Framework/Yi.Framework.Service/RoleService.cs +++ b/Yi.Framework/Yi.Framework.Service/RoleService.cs @@ -11,58 +11,52 @@ namespace Yi.Framework.Service { public partial class RoleService:BaseService, IRoleService { - /// - /// 该方法返回的是并列角色并列的菜单,无递归 - /// - /// - /// - public async Task> GetMenusByRole(role _role) + short Normal = (short)Common.Enum.DelFlagEnum.Normal; + + public async Task> GetRolesByUserId(int userId) { - var role_data =await _Db.Set().Include(u => u.menus) - .Where(u => u.id == _role.id && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync(); - var menuList =role_data.menus.Where(u => u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).ToList(); - return menuList; - } - - /// - /// 这个接口好像没用,算作废吧,怎么能通过角色获取用户呢?数据库表也得改,不能通过角色获取用户 - /// - /// - /// - public async Task> GetUsersByRole(role _role) - { - var role_data = await _Db.Set().Include(u => u.users) - .Where(u => u.id == _role.id && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync(); - return role_data.users.ToList(); + var user_data =await _Db.Set().Include(u => u.roles).Where(u => u.id==userId).FirstOrDefaultAsync(); + var roleList = user_data.roles.Where(u=>u.is_delete==Normal).ToList(); + return roleList; } public async Task SetMenusByRolesId(List menuIds,List roleIds) { - var role_data = await _Db.Set().Include(u=>u.menus).Where(u =>roleIds.Contains(u.id) && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).ToListAsync(); - if (role_data == null) - { - return false; - } - var menuList = await _Db.Set().Where(u => menuIds.Contains(u.id)&&u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).ToListAsync(); + var role_data = await _Db.Set().Include(u => u.menus).ThenInclude(u => u.children).Where(u =>roleIds.Contains(u.id) && u.is_delete == Normal).ToListAsync(); + var menuList = await _Db.Set().Where(u => menuIds.Contains(u.id)&&u.is_delete ==Normal).ToListAsync(); foreach(var role in role_data) { role.menus =menuList; } return await UpdateListAsync(role_data); } - - /// - /// 好像也不需要通过菜单来获取角色啊,这个数据库也得改 - /// - /// - /// - public async Task> GetMenusByRoleId(int roleId) + + public async Task> GetMenusByRoleId(List< int> roleIds) { - var role_data = await _Db.Set().Include(u=>u.menus).Where(u =>u.id==roleId && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync(); - var menuList = role_data.menus.ToList(); - menuList.ForEach(u => u.roles = null); + var role_data = await _Db.Set().Include(u => u.menus).Where(u => roleIds.Contains(u.id) && u.is_delete == Normal).ToListAsync(); + List menuList = new(); + role_data.ForEach(u => + { + var m = u.menus.Where(u => u.is_delete == Normal).ToList(); + menuList = menuList.Union(m).ToList(); + }); return menuList; } + public async Task> GetTopMenusByRoleId(int roleId) + { + var role_data = await _Db.Set().Where(u => u.id == roleId).FirstOrDefaultAsync(); + var menuList = role_data.menus.Where(u => u.is_delete == Normal).ToList(); + menuList.ForEach(u => u.children = null); + return menuList; + } + + public async Task> GetMenusByRole(int roleId) + { + var role_data = await _Db.Set().Include(u => u.menus).Where(u => u.id == roleId).FirstOrDefaultAsync(); + var menuList = role_data.menus.Where(u => u.is_delete == Normal).ToList(); + return menuList; + } + } } diff --git a/Yi.Framework/Yi.Framework.Service/UserService.cs b/Yi.Framework/Yi.Framework.Service/UserService.cs index 24fcc629..e602daef 100644 --- a/Yi.Framework/Yi.Framework.Service/UserService.cs +++ b/Yi.Framework/Yi.Framework.Service/UserService.cs @@ -38,7 +38,7 @@ namespace Yi.Framework.Service /// public async Task GetUserById(int userId) { - return await _Db.Set().Include(u => u.roles).ThenInclude(u => u.menus).ThenInclude(u => u.children).ThenInclude(u => u.mould).Where(u=>u.id==userId).FirstOrDefaultAsync(); + return await _DbRead.Set().Include(u => u.roles).ThenInclude(u => u.menus).ThenInclude(u => u.children).ThenInclude(u => u.mould).Where(u=>u.id==userId).FirstOrDefaultAsync(); } public async Task> GetAxiosByRouter(string router, int userId, List menuIds) @@ -47,7 +47,7 @@ namespace Yi.Framework.Service List menuList = new(); foreach(var item in user_data.roles) { - var m= item.menus.Where(u => u.router.ToUpper() == router.ToUpper()).FirstOrDefault(); + var m=item.menus.Where(u => u.router.ToUpper() == router.ToUpper()).FirstOrDefault(); menuList= m.children.Where(u => menuIds.Contains(u.id)&&u.is_delete==Normal).ToList(); if (m != null) { break; } } @@ -73,7 +73,7 @@ namespace Yi.Framework.Service List endMenu = new(); foreach (var item in topMenu) { - var p = await _Db.Set().Where(u => u.id == item.id).Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ToListAsync(); + var p = await _DbRead.Set().Where(u => u.id == item.id).Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ToListAsync(); endMenu = endMenu.Union(p).ToList(); } @@ -92,10 +92,7 @@ namespace Yi.Framework.Service for (int i = menu_data.Count() - 1; i >= 0; i--) { - if (menu_data[i].icon == null) - { - menu_data[i].icon = "Yi"; - } + if (!allMenuIds.Contains(menu_data[i].id) || menu_data[i].is_delete == (short)Common.Enum.DelFlagEnum.Deleted || menu_data[i].is_show == (short)Common.Enum.ShowFlagEnum.NoShow) { @@ -139,7 +136,7 @@ namespace Yi.Framework.Service public async Task Login(user _user) { - var user_data = await _Db.Set().Include(u => u.roles).Where(u => u.username == _user.username && u.password ==_user.password &&u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync(); + var user_data = await _DbRead.Set().Include(u => u.roles).Where(u => u.username == _user.username && u.password ==_user.password &&u.is_delete == Normal).FirstOrDefaultAsync(); return user_data; } @@ -155,8 +152,8 @@ namespace Yi.Framework.Service public async Task SetRoleByUser(List roleIds, List userIds) { - var user_data = await _Db.Set().Include(u => u.roles).Where(u => userIds.Contains(u.id)).ToListAsync(); - var roleList = await _Db.Set().Where(u => roleIds.Contains(u.id)).ToListAsync(); + var user_data = await _DbRead.Set().Include(u => u.roles).Where(u => userIds.Contains(u.id)).ToListAsync(); + var roleList = await _DbRead.Set().Where(u => roleIds.Contains(u.id)).ToListAsync(); user_data.ForEach(u => u.roles = roleList); return await UpdateListAsync(user_data); } diff --git a/Yi.Framework/Yi.Framework.StaticPageProcessor/Program.cs b/Yi.Framework/Yi.Framework.StaticPageProcessor/Program.cs index d540e7a6..c7cfbfd7 100644 --- a/Yi.Framework/Yi.Framework.StaticPageProcessor/Program.cs +++ b/Yi.Framework/Yi.Framework.StaticPageProcessor/Program.cs @@ -47,7 +47,7 @@ namespace Yi.Framework.StaticPageProcessor services.AddHostedService(); #region 服务注入 - services.Configure(configuration.GetSection("MysqlConn")); + //services.Configure(configuration.GetSection("MysqlConn")); services.AddTransient(); services.Configure(configuration.GetSection("RedisConn"));