更新返回动态接口

This commit is contained in:
lzw
2021-10-24 17:13:28 +08:00
parent 5d49ad55f7
commit ce21afb8e1
5 changed files with 46 additions and 42 deletions

View File

@@ -21,10 +21,12 @@ namespace Yi.Framework.ApiMicroservice.Controllers
private readonly ILogger<UserController> _logger;
private IUserService _userService;
public AccountController(ILogger<UserController> logger, IUserService userService)
private IMenuService _menuService;
public AccountController(ILogger<UserController> logger, IUserService userService, IMenuService menuService)
{
_logger = logger;
_userService = userService;
_menuService = menuService;
}
@@ -37,10 +39,10 @@ namespace Yi.Framework.ApiMicroservice.Controllers
public async Task<Result> 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();

View File

@@ -138,33 +138,20 @@ namespace Yi.Framework.ApiMicroservice.Controllers
[HttpGet]
public async Task<Result> GetRouterByUserId(string router)
{
var _user = HttpContext.GetCurrentUserInfo();
var menu_data = await _userService.GetMenuByUserId(router,_user.id);
var _user = HttpContext.GetCurrentUserInfo(out List<int> 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);
}

View File

@@ -86,7 +86,7 @@ namespace Yi.Framework.Interface
/// </summary>
/// <param name="router"></param>
/// <returns></returns>
Task<menu> GetMenuByUserId(string router,int userId);
Task<List<menu>> GetMenuByUserId(string router,int userId, List<int> menuIds);
}
}

View File

@@ -110,15 +110,14 @@ namespace Yi.Framework.Service
}
public async Task <List<menu>> GetMenuByUser(user _user)
{
var user_data =await _Db.Set<user>().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<user>().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> 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<menu> GetMenuByUserId(string router,int userId)
public async Task<List<menu>> GetMenuByUserId(string router,int userId,List<int> menuIds)
{
var user_data= await _Db.Set<user>().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<user>().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> 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;

View File

@@ -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<Claim> claimlist = httpContext.AuthenticateAsync().Result.Principal.Claims;
Int32.TryParse(claimlist.FirstOrDefault(u => u.Type == ClaimTypes.Sid).Value, out int resId);
return new user()
{
id = resId,