using System.Collections; using Infrastructure; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using OpenAuth.App; using OpenAuth.App.Interface; using OpenAuth.App.Response; using OpenAuth.App.SSO; using OpenAuth.Repository.Domain; using Infrastructure.Helpers; using SqlSugar; using Infrastructure.Extensions; using Infrastructure.Utilities; namespace OpenAuth.WebApi.Controllers { /// /// /// 登录及与登录信息获取相关的接口 /// [Route("api/[controller]/[action]")] [ApiController] //[ApiExplorerSettings(GroupName = "登录验证_Check")] public class CheckController : ControllerBase { private readonly IAuth _authUtil; private AuthStrategyContext _authStrategyContext; public CheckController(IAuth authUtil) { _authUtil = authUtil; _authStrategyContext = _authUtil.GetCurrentUser(); } #region 当前登录用户资源 #region 用户信息 /// /// 获取登录用户资料 /// /// [HttpGet] public Response GetUserProfile() { var resp = new Response(); try { resp.Result = _authStrategyContext.User.MapTo(); if (_authStrategyContext.Orgs != null) { var orgLevel = _authStrategyContext.Orgs.Min(a => a.Level); resp.Result.OrgMaxLevel = orgLevel.ToString(); } } catch (Exception e) { resp.Code = 500; resp.Message = e.Message; } return resp; } #endregion #region 角色 /// /// 获取登录用户的所有可访问的角色 /// [HttpGet] public Response> GetRoles() { var result = new Response>(); try { result.Result = _authStrategyContext.Roles; } catch (CommonException ex) { if (ex.Code == Define.INVALID_TOKEN) { result.Code = ex.Code; result.Message = ex.Message; } else { result.Code = 500; result.Message = ex.InnerException != null ? "OpenAuth.WebAPI数据库访问失败:" + ex.InnerException.Message : "OpenAuth.WebAPI数据库访问失败:" + ex.Message; } } return result; } #endregion #region 部门 /// /// 获取登录用户的所有可访问的组织信息 /// [HttpGet] public Response> GetOrgs() { var result = new Response>(); try { result.Result = _authStrategyContext.Orgs; } catch (CommonException ex) { if (ex.Code == Define.INVALID_TOKEN) { result.Code = ex.Code; result.Message = ex.Message; } else { result.Code = 500; result.Message = ex.InnerException != null ? "OpenAuth.WebAPI数据库访问失败:" + ex.InnerException.Message : "OpenAuth.WebAPI数据库访问失败:" + ex.Message; } } return result; } #endregion #region 菜单 /// /// 获取登录用户的所有可访问的模块及菜单,以列表形式返回结果 /// [HttpGet] public Response> GetModules() { var result = new Response>(); try { result.Result = _authStrategyContext.Modules; } catch (CommonException ex) { if (ex.Code == Define.INVALID_TOKEN) { result.Code = ex.Code; result.Message = ex.Message; } else { result.Code = 500; result.Message = ex.InnerException != null ? "OpenAuth.WebAPI数据库访问失败:" + ex.InnerException.Message : "OpenAuth.WebAPI数据库访问失败:" + ex.Message; } } return result; } [HttpGet] public IEnumerable BuildModelTree(IEnumerable modules) { var modulesMap = modules.ToDictionary(f => f.Id, f => new ModuleView { Id = f.Id, CascadeId = f.CascadeId, Name = f.Name, Url = f.Url, ParentId = f.ParentId, ParentName = f.ParentName, IconName = f.IconName, Status = f.Status, Checked = f.Checked, SortNo = f.SortNo, Elements = f.Elements, Code = f.Code, IsSys = f.IsSys, ModuleTypeId = f.ModuleTypeId, Children = new List() } ); var rootNodes = new List(); foreach (var module in modules) { if (string.IsNullOrEmpty(module.ParentId) ||module.ParentId == "0") { rootNodes.Add(modulesMap[module.Id]); } else if (modulesMap.TryGetValue(module.ParentId, out var parentNode)) { parentNode.Children.Add(modulesMap[module.Id]); } } return rootNodes.OrderBy(a => a.SortNo); } [HttpGet] public Response> GetModulesTree(string typeid) { var result = new Response>(); try { result.Result = BuildModelTree(_authStrategyContext.Modules .WhereIF(!string.IsNullOrEmpty(typeid), a => a.ModuleTypeId == typeid)); /*result.Result = _authStrategyContext.Modules .WhereIF(!string.IsNullOrEmpty(typeid), a => a.ModuleTypeId == typeid) .OrderBy(a => a.SortNo) .GenerateTree(u => u.Id, u => u.ParentId, "0");*/ } catch (CommonException ex) { if (ex.Code == Define.INVALID_TOKEN) { result.Code = ex.Code; result.Message = ex.Message; } else { result.Code = 500; result.Message = ex.InnerException != null ? "OpenAuth.WebAPI数据库访问失败:" + ex.InnerException.Message : "OpenAuth.WebAPI数据库访问失败:" + ex.Message; } } return result; } /// /// 获取登录用户的所有可访问的模块及菜单,以树状结构返回 /// 菜单类型 /// [HttpGet] public Response>> GetModulesTree1(string typeid) { var result = new Response>>(); try { result.Result = _authStrategyContext.Modules.WhereIF(!string.IsNullOrEmpty(typeid), a => a.ModuleTypeId == typeid).OrderBy(a => a.SortNo).GenerateTree(u => u.Id, u => u.ParentId, "0"); } catch (CommonException ex) { if (ex.Code == Define.INVALID_TOKEN) { result.Code = ex.Code; result.Message = ex.Message; } else { result.Code = 500; result.Message = ex.InnerException != null ? "OpenAuth.WebAPI数据库访问失败:" + ex.InnerException.Message : "OpenAuth.WebAPI数据库访问失败:" + ex.Message; } } return result; } #endregion #endregion #region 登录 /// /// 登录接口 /// /// 登录参数 /// [HttpPost] [AllowAnonymous] public Response Login(PassportLoginRequest request) { //var aaaa = Md5Helper.Encrypt(DESEncrypt.Encrypt(Md5Helper.Hash("x9p$E$Bxc$v1kViqZTJ1%#0sORIhf*^3"), "390cbc0b25469cc5").ToLower(), 32).ToLower(); return _authUtil.Login(request.AppKey, request.Account, request.Password); } /// /// 注销登录 /// /// /// 备用参数. [HttpPost] public Response Logout() { var resp = new Response(); try { resp.Result = _authUtil.Logout(); } catch (Exception e) { resp.Result = false; resp.Message = e.Message; } return resp; } #endregion #region 未启用/后台使用 #region 检验token是否有效 /// /// 检验token是否有效 /// /// The token. /// 备用参数. [HttpGet] [ApiExplorerSettings(IgnoreApi = true)] public Response GetStatus() { var result = new Response(); try { result.Result = _authUtil.CheckLogin(); } catch (Exception ex) { result.Code = Define.INVALID_TOKEN; result.Message = ex.Message; } return result; } /// /// 图片验证token /// /// [HttpGet] public IActionResult Validate() { if (_authUtil.CheckLogin()) { return Ok(); } else { return BadRequest(); } } #endregion #region 根据token获取用户名称 /// /// 根据token获取用户名称 /// [HttpGet] [ApiExplorerSettings(IgnoreApi = true)] public Response GetUserName() { var result = new Response(); try { result.Result = _authStrategyContext.User.Account; } catch (CommonException ex) { if (ex.Code == Define.INVALID_TOKEN) { result.Code = ex.Code; result.Message = ex.Message; } else { result.Code = 500; result.Message = ex.InnerException != null ? ex.InnerException.Message : ex.Message; } } return result; } #endregion #region 加载机构的全部下级机构 /// /// 加载机构的全部下级机构 /// /// 机构ID /// [HttpGet] [ApiExplorerSettings(IgnoreApi = true)] public TableData GetSubOrgs(long orgId) { string cascadeId = ".0."; if (orgId != 0) { var org = _authStrategyContext.Orgs.SingleOrDefault(u => u.Id == orgId); if (org == null) { return new TableData { msg = "未找到指定的节点", code = 500, }; } cascadeId = org.CascadeId; } var query = _authStrategyContext.Orgs .Where(u => u.CascadeId.Contains(cascadeId)) .OrderBy(u => u.CascadeId); return new TableData { data = query.ToList(), count = query.Count(), }; } #endregion #endregion } }