From 9d83b24a8dd630431f9a9421688753ec38cc4611 Mon Sep 17 00:00:00 2001 From: lzw <605106923@qq.com> Date: Wed, 27 Oct 2021 23:03:56 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84user=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UserController.cs | 30 ++- .../Yi.Framework.Interface/IUserService.cs | 56 ++--- .../Yi.Framework.Interface/T4Iservice.cs | 12 +- .../Yi.Framework.Interface/T4Iservice.tt | 3 +- .../Yi.Framework.Model/Models/menu.cs | 2 +- .../Yi.Framework.Model/Models/role.cs | 2 +- .../Yi.Framework.Model/Models/user.cs | 2 +- .../Yi.Framework.Service/BaseService.cs | 4 +- .../Yi.Framework.Service/UserService.cs | 193 +++++------------- 9 files changed, 102 insertions(+), 202 deletions(-) diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs index 0ac1b921..ceb88cb8 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs @@ -84,17 +84,10 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpPost] public async Task SetRoleByUser(IdsListDto idsListDto) { + await _userService.SetRoleByUser(idsListDto.ids2, idsListDto.ids1); + return Result.Success(); } - /// - /// 根据用户id得到该用户有哪些角色 - /// 用于显示用户详情中的角色说明 - /// - /// - [HttpGet] - public async Task GetRolesByUserId(int userId) - { - } /// /// 根据http上下文的用户得到该用户信息,关联角色 /// 用于显示账号信息页中的用户信息和角色信息 @@ -103,6 +96,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpGet] public async Task GetUserInRolesByHttpUser() { + var _user = HttpContext.GetCurrentUserInfo(); + return Result.Success().SetData( await _userService.GetUserInRolesByHttpUser(_user.id)); } /// @@ -113,6 +108,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpGet] public async Task GetMenuByHttpUser() { + var _user = HttpContext.GetCurrentUserInfo(); + return Result.Success().SetData(await _userService.GetMenuByHttpUser(_user.id)); } /// @@ -123,6 +120,21 @@ 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); + AxiosUrlsModel urlsModel = new(); + menuList.ForEach(u => + { + switch (u.menu_name) + { + case "get":urlsModel.get = u.mould.url;break; + case "del": urlsModel.del = u.mould.url; break; + case "add": urlsModel.add = u.mould.url; break; + case "update": urlsModel.update = u.mould.url; break; + } + }); + + return Result.Success().SetData(urlsModel); } } diff --git a/Yi.Framework/Yi.Framework.Interface/IUserService.cs b/Yi.Framework/Yi.Framework.Interface/IUserService.cs index 38433301..5230e1c9 100644 --- a/Yi.Framework/Yi.Framework.Interface/IUserService.cs +++ b/Yi.Framework/Yi.Framework.Interface/IUserService.cs @@ -8,9 +8,7 @@ using Yi.Framework.Model.Models; namespace Yi.Framework.Interface { public partial interface IUserService:IBaseService - { - Task DelListByUpdateAsync(List _ids); - Task> GetAllEntitiesTrueAsync(); + { /// /// 登录,传入_user需包含用户名与密码/角色 @@ -23,70 +21,44 @@ namespace Yi.Framework.Interface /// /// Task Register(user _user); - - /// - /// 根据用户得到该用户有哪些角色 - /// - /// - Task> GetRolesByUser(user _user); - - /// - /// 得到该用户拥有哪些菜单(注意:每一个菜单需要绑定好对应mould) - /// - /// - /// - Task> GetMenusByUser(user _user); - - /// - /// 得到该用户拥有哪些mould - /// - /// - /// - Task> GetMouldByUser(user _user); - /// /// 给多个用户设置多个角色 /// /// /// /// - Task SetRolesByUser(List roleIds, List userIds); + Task SetRoleByUser(List roleIds, List userIds); + /// + /// 通过id获取用户信息,关联角色、菜单、子菜单、接口 + /// + /// + /// + Task GetUserById(int userId); /// /// email验证 /// /// /// Task EmailIsExsit(string emailAddress); - /// - /// 获取用户的目录菜单,没有绑定接口 - /// - /// - /// - Task> GetMenuByUser(user _user); - /// - /// 通过用户id,得到该用户的所有信息,关联角色,过滤迭代 - /// - /// - /// - Task GetUserInfoById(int user_id); + /// /// 通过用户id,得到该用户的所有信息,关联角色 /// - /// + /// /// - Task GetUserById(int user_id); + Task GetUserInRolesByHttpUser(int userId); /// /// 通过http获取用户id,得到该用户所有的菜单(递归的那种),把所有children为[]的值全部过滤成null,不要绑定mould /// - /// + /// /// - Task> GetMenuById(int user_id); + Task> GetMenuByHttpUser(int userId); /// /// 根据路由获取菜单 /// /// /// - Task> GetMenuByUserId(string router,int userId, List menuIds); + Task> GetAxiosByRouter(string router,int userId, List menuIds); } } diff --git a/Yi.Framework/Yi.Framework.Interface/T4Iservice.cs b/Yi.Framework/Yi.Framework.Interface/T4Iservice.cs index a3d5323f..e3393b89 100644 --- a/Yi.Framework/Yi.Framework.Interface/T4Iservice.cs +++ b/Yi.Framework/Yi.Framework.Interface/T4Iservice.cs @@ -10,21 +10,25 @@ namespace Yi.Framework.Interface public partial interface IMenuService:IBaseService { - + Task DelListByUpdateAsync(List _ids); + Task> GetAllEntitiesTrueAsync(); } public partial interface IMouldService:IBaseService { - + Task DelListByUpdateAsync(List _ids); + Task> GetAllEntitiesTrueAsync(); } public partial interface IRoleService:IBaseService { - + Task DelListByUpdateAsync(List _ids); + Task> GetAllEntitiesTrueAsync(); } public partial interface IUserService:IBaseService { - + Task DelListByUpdateAsync(List _ids); + Task> GetAllEntitiesTrueAsync(); } } diff --git a/Yi.Framework/Yi.Framework.Interface/T4Iservice.tt b/Yi.Framework/Yi.Framework.Interface/T4Iservice.tt index 8e402816..0357f5a4 100644 --- a/Yi.Framework/Yi.Framework.Interface/T4Iservice.tt +++ b/Yi.Framework/Yi.Framework.Interface/T4Iservice.tt @@ -36,7 +36,8 @@ namespace Yi.Framework.Interface public partial interface I<#= fn #>Service:IBaseService<<#= k #>> { - + Task DelListByUpdateAsync(List _ids); + Task>> GetAllEntitiesTrueAsync(); } <# } #> } diff --git a/Yi.Framework/Yi.Framework.Model/Models/menu.cs b/Yi.Framework/Yi.Framework.Model/Models/menu.cs index 5da4bfa7..80ff6cff 100644 --- a/Yi.Framework/Yi.Framework.Model/Models/menu.cs +++ b/Yi.Framework/Yi.Framework.Model/Models/menu.cs @@ -14,7 +14,7 @@ namespace Yi.Framework.Model.Models - public IList children { get; set; } + public List children { get; set; } public mould mould { get; set; } } } diff --git a/Yi.Framework/Yi.Framework.Model/Models/role.cs b/Yi.Framework/Yi.Framework.Model/Models/role.cs index 2784000a..3e6b4927 100644 --- a/Yi.Framework/Yi.Framework.Model/Models/role.cs +++ b/Yi.Framework/Yi.Framework.Model/Models/role.cs @@ -12,6 +12,6 @@ namespace Yi.Framework.Model.Models public string introduce { get; set; } - public IList menus { get; set; } + public List menus { get; set; } } } diff --git a/Yi.Framework/Yi.Framework.Model/Models/user.cs b/Yi.Framework/Yi.Framework.Model/Models/user.cs index ff30d822..ef0ae625 100644 --- a/Yi.Framework/Yi.Framework.Model/Models/user.cs +++ b/Yi.Framework/Yi.Framework.Model/Models/user.cs @@ -21,7 +21,7 @@ namespace Yi.Framework.Model.Models public int? phone { get; set; } - public IList roles { get; set; } + public List roles { get; set; } } } diff --git a/Yi.Framework/Yi.Framework.Service/BaseService.cs b/Yi.Framework/Yi.Framework.Service/BaseService.cs index 7cb12069..c74a9760 100644 --- a/Yi.Framework/Yi.Framework.Service/BaseService.cs +++ b/Yi.Framework/Yi.Framework.Service/BaseService.cs @@ -14,13 +14,13 @@ namespace Yi.Framework.Service public class BaseService : IBaseService where T : class, new() { public DbContext _Db; - public DbContext _Db2; + public DbContext _DbRead; public IDbContextFactory _DbFactory; public BaseService(IDbContextFactory DbFactory) { _DbFactory = DbFactory; _Db = DbFactory.ConnWriteOrRead(WriteAndReadEnum.Write); - _Db2 = DbFactory.ConnWriteOrRead(WriteAndReadEnum.Read); + _DbRead = DbFactory.ConnWriteOrRead(WriteAndReadEnum.Read); } public async Task GetEntityById(int id) diff --git a/Yi.Framework/Yi.Framework.Service/UserService.cs b/Yi.Framework/Yi.Framework.Service/UserService.cs index d370044b..24fcc629 100644 --- a/Yi.Framework/Yi.Framework.Service/UserService.cs +++ b/Yi.Framework/Yi.Framework.Service/UserService.cs @@ -15,6 +15,7 @@ namespace Yi.Framework.Service public partial class UserService : BaseService, IUserService { private IRoleService _roleService; + short Normal = (short)Common.Enum.DelFlagEnum.Normal; public UserService(IDbContextFactory DbFactory, IRoleService roleService) : base(DbFactory) { _roleService = roleService; @@ -30,147 +31,46 @@ namespace Yi.Framework.Service } return false; } - /// - /// 大优化,直接传用户id即可 + /// /// - /// + /// /// - public async Task> GetMenusByUser(user _user) + public async Task GetUserById(int userId) { - var role_data = await GetRolesByUser(_user); - var menuList = new List(); - role_data.ForEach(u => + 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(); + + } + public async Task> GetAxiosByRouter(string router, int userId, List menuIds) + { + var user_data =await GetUserById(userId); + List menuList = new(); + foreach(var item in user_data.roles) { - var menu_data = _roleService.GetMenusByRole(u); - menuList = menuList.Concat(menu_data.GetAwaiter().GetResult()).ToList(); - }); - menuList.ForEach(u => u.roles = null); - return menuList; - } - - /// - /// 大优化只用id即可,这个方法和GetMenusByUser几乎没有任何区别 - /// - /// - /// - public async Task> GetMouldByUser(user _user) - { - var menu = await GetMenusByUser(_user); - var mouldList = menu.Select(u => u.mould).ToList(); - return mouldList; - } - - - public async Task> GetRolesByUser(user _user) - { - var user_data = await _Db.Set().Include(u => u.roles) - .Where(u => u.id == _user.id && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync(); - var roleList = user_data.roles.Where(u => u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).ToList(); - roleList.ForEach(u => u.users = null); - return roleList; - } - - 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(); - return user_data; - } - - public async Task Register(user _user) - { - var user_data = await GetEntity(u => u.username == _user.username); - if (user_data != null) - { - return false; + 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; } } - return await AddAsync(_user); - } + return menuList; + } - /// - /// 优化,如果是传的id,或者是传一个对象,不是要返回全部信息,那么可知直接认为该id一定存在 - /// - /// - /// - /// - public async Task SetRolesByUser(List roleIds, List userIds) + public async Task> GetMenuByHttpUser(int userId) { - var user_data = await _Db.Set().Include(u => u.roles).Where(u => userIds.Contains(u.id) ).ToListAsync(); - if (user_data == null) + var user_data = await GetUserById(userId); + List menuList = new(); + foreach (var item in user_data.roles) { - return false; - } - var roleList = await _Db.Set().Where(u => roleIds.Contains(u.id)).ToListAsync(); - foreach (var item in user_data) - { - item.roles = roleList; - } - return await UpdateListAsync(user_data); - } - - /// - /// 有可简化的GetUserById - /// - /// - /// - public async Task> GetMenuByUser(user _user) - { - var user_data = await _Db.Set().Include(u => u.roles).ThenInclude(u => u.menus).Where(u => u.id == _user.id ).FirstOrDefaultAsync(); - List menu_data = new(); - foreach (var role in user_data.roles) - { - var menu = role.menus.ToList(); - menu.ForEach(u => u.roles = null); - menu_data = menu_data.Concat(menu).ToList(); - } - return menu_data; - } - - - public async Task GetUserInfoById(int user_id) - { - var user_data = await GetUserById(user_id); - user_data.roles.ToList().ForEach(u => u.users = null); - return user_data; - } - - /// - /// 这个方法可以被超级多个其他方法利用,这个是重要的 - /// - /// - /// - public async Task GetUserById(int user_id) - { - var user_data = await _Db.Set().Include(u => u.roles) - .Where(u => u.id == user_id && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync(); - return user_data; - } - - /// - /// 有可简化的GetUserById - /// - /// - /// - public async Task> GetMenuById(int user_id) - { - var user_data = await _Db.Set().Include(u => u.roles).Where(u => u.id == user_id).FirstOrDefaultAsync(); - List menu_data = new(); - - foreach (var role in user_data.roles) - { - var menu = await _roleService.GetMenusByRole(role); - menu.ForEach(u => u.roles = null); - menu_data = menu_data.Union(menu).OrderByDescending(u => u.sort).ToList(); + var m = item.menus.Where(u => u.is_delete == Normal).ToList(); + menuList = menuList.Union(m).OrderByDescending(u => u.sort).ToList(); } //menu_data为角色所有的菜单,不是一个递归的啊 - var allMenuIds = menu_data.Select(u => u.id).ToList(); - var topMenu = menu_data.Where(u => u.is_top == (short)Common.Enum.ShowFlagEnum.Show); + var allMenuIds = menuList.Select(u => u.id).ToList(); + var topMenu = menuList.Where(u => u.is_top == (short)Common.Enum.ShowFlagEnum.Show); //现在要开始关联菜单了 - List endMenu = new List(); + 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(); @@ -221,7 +121,7 @@ namespace Yi.Framework.Service { if (menu_data[i].children.Count() == 0) { - menu_data[i].children = null;f + menu_data[i].children = null; } else if (menu_data[i].children != null) { @@ -230,24 +130,35 @@ namespace Yi.Framework.Service } return menu_data; } + - - - public async Task> GetMenuByUserId(string router, int userId, List menuIds) + public async Task GetUserInRolesByHttpUser(int userId) { - var user_data = 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(); - var roleList = user_data.roles.ToList(); - roleList.ForEach(u => u.users = null); - List menu_data = new(); - foreach (var item in roleList) + return await GetUserById(userId); + } + + 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(); + return user_data; + } + + public async Task Register(user _user) + { + var user_data = await GetEntity(u => u.username == _user.username); + if (user_data != null) { - item.menus.ToList().ForEach(u => u.roles = null); - var menuData = item.menus.Where(u => u.router.ToUpper() == router.ToUpper()).FirstOrDefault(); - menu_data = menuData.children?.Where(u => menuIds.Contains(u.id) && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).ToList(); - if (menu_data != null) { break; } + return false; } - return menu_data; + return await AddAsync(_user); + } + + 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(); + user_data.ForEach(u => u.roles = roleList); + return await UpdateListAsync(user_data); } } }