From ce21afb8e143f748ae198271f3fc734bfc606364 Mon Sep 17 00:00:00 2001 From: lzw <605106923@qq.com> Date: Sun, 24 Oct 2021 17:13:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=BF=94=E5=9B=9E=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/AccountController.cs | 12 ++++--- .../Controllers/UserController.cs | 35 ++++++------------- .../Yi.Framework.Interface/IUserService.cs | 2 +- .../Yi.Framework.Service/UserService.cs | 27 +++++++------- .../Yi.Framework.WebCore/CommonExtend.cs | 12 +++++++ 5 files changed, 46 insertions(+), 42 deletions(-) diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/AccountController.cs b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/AccountController.cs index f7884dc7..d00fab63 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/AccountController.cs +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/AccountController.cs @@ -21,10 +21,12 @@ namespace Yi.Framework.ApiMicroservice.Controllers private readonly ILogger _logger; private IUserService _userService; - public AccountController(ILogger logger, IUserService userService) + private IMenuService _menuService; + public AccountController(ILogger logger, IUserService userService, IMenuService menuService) { _logger = logger; _userService = userService; + _menuService = menuService; } @@ -37,10 +39,10 @@ namespace Yi.Framework.ApiMicroservice.Controllers public async Task Login(user _user) { var user_data = await _userService.Login(_user); - if( user_data!=null) - { - - var token = MakeJwt.app(user_data); + var menuList = await _userService.GetMenusByUser(user_data); + if ( user_data!=null) + { + var token = MakeJwt.app(new jwtUser() {user=user_data,menuIds= menuList}); return Result.Success().SetData(new { user = new { _user.id, _user.username, _user.introduction, _user.icon, _user.nick }, token }); } return Result.Error(); diff --git a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs index 70d4bb64..1e896694 100644 --- a/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs +++ b/Yi.Framework/Yi.Framework.ApiMicroservice/Controllers/UserController.cs @@ -138,33 +138,20 @@ namespace Yi.Framework.ApiMicroservice.Controllers [HttpGet] public async Task GetRouterByUserId(string router) { - var _user = HttpContext.GetCurrentUserInfo(); - var menu_data = await _userService.GetMenuByUserId(router,_user.id); + var _user = HttpContext.GetCurrentUserInfo(out List menuIds); + var menu_data = await _userService.GetMenuByUserId(router,_user.id, menuIds); AxiosUrlsModel urlsModel = new(); - foreach (var _menu in menu_data.children) - if (_menu.mould.mould_name == "get") + foreach (var _menu in menu_data) + { + var mould_name = _menu.mould.mould_name; + switch (mould_name) { - urlsModel.get= _menu.mould.url; - } - else if (_menu.mould.mould_name == "del") - { - urlsModel.del= _menu.mould.url ; - } - else if (_menu.mould.mould_name == "update") - { - urlsModel.update= _menu.mould.url ; - } - else if (_menu.mould.mould_name == "add") - { - urlsModel.add = _menu.mould.url ; - } - else - { - urlsModel.add = null; - urlsModel.del = null; - urlsModel.update = null; - urlsModel.get = null; + case "get":urlsModel.get= _menu.mould.url;break; + case "add": urlsModel.add = _menu.mould.url; break; + case "del": urlsModel.del = _menu.mould.url; break; + case "update": urlsModel.update = _menu.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 5c4a4799..38433301 100644 --- a/Yi.Framework/Yi.Framework.Interface/IUserService.cs +++ b/Yi.Framework/Yi.Framework.Interface/IUserService.cs @@ -86,7 +86,7 @@ namespace Yi.Framework.Interface /// /// /// - Task GetMenuByUserId(string router,int userId); + Task> GetMenuByUserId(string router,int userId, List menuIds); } } diff --git a/Yi.Framework/Yi.Framework.Service/UserService.cs b/Yi.Framework/Yi.Framework.Service/UserService.cs index 3096ff8a..c7f828dc 100644 --- a/Yi.Framework/Yi.Framework.Service/UserService.cs +++ b/Yi.Framework/Yi.Framework.Service/UserService.cs @@ -110,15 +110,14 @@ namespace Yi.Framework.Service } 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 && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync(); - var role_data= user_data.roles.ToList(); + //var user_data =await _Db.Set().Include(u => u.roles).ThenInclude(u => u.menus) + // .Where(u => u.id == _user.id && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync(); List menu_data = new (); - foreach (var role in role_data) + foreach (var role in _user.roles) { - var menu = await _roleService.GetMenusByRole(role); + var menu = role.menus.ToList(); menu.ForEach(u=>u.roles=null); - menu_data = menu_data.Concat(menu).OrderByDescending(u=>u.sort).ToList(); + menu_data = menu_data.Concat(menu).ToList(); } return menu_data; } @@ -204,15 +203,19 @@ namespace Yi.Framework.Service - public async Task GetMenuByUserId(string router,int userId) + public async Task> GetMenuByUserId(string router,int userId,List menuIds) { - var user_data= await _Db.Set().Include(u => u.roles).ThenInclude(u => u.menus).ThenInclude(u => u.mould) - .Where(u => u.id==userId&&u.is_delete == (short)Common.Enum.DelFlagEnum.Normal && u.is_delete == (short)Common.Enum.ShowFlagEnum.Show).FirstOrDefaultAsync(); + 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(); - menu menu_data=new(); + roleList.ForEach(u => u.users = null); + List menu_data =new(); foreach(var item in roleList) - { - menu_data = item.menus.Where(u => u.router == router).FirstOrDefault(); + { + item.menus.ToList().ForEach(u => u.roles = null); + var menuData = item.menus.Where(u => u.router == router).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 menu_data; diff --git a/Yi.Framework/Yi.Framework.WebCore/CommonExtend.cs b/Yi.Framework/Yi.Framework.WebCore/CommonExtend.cs index 7ddde91a..35bf7cda 100644 --- a/Yi.Framework/Yi.Framework.WebCore/CommonExtend.cs +++ b/Yi.Framework/Yi.Framework.WebCore/CommonExtend.cs @@ -39,6 +39,18 @@ namespace Yi.Framework.WebCore menuIds = claimlist.Where(u => u.Type == "menuIds").ToList().Select(u => Convert.ToInt32(u.Value)).ToList(); + return new user() + { + id = resId, + username = claimlist.FirstOrDefault(u => u.Type == ClaimTypes.Name).Value ?? "匿名" + }; + } + public static user GetCurrentUserInfo(this HttpContext httpContext) + { + IEnumerable claimlist = httpContext.AuthenticateAsync().Result.Principal.Claims; + + Int32.TryParse(claimlist.FirstOrDefault(u => u.Type == ClaimTypes.Sid).Value, out int resId); + return new user() { id = resId,