// *********************************************************************** // Assembly : OpenAuth.WebApi // Author : yubaolee // Created : 07-11-2016 // // Last Modified By : yubaolee // Last Modified On : 07-11-2016 // Contact : // File: CheckController.cs // 登录相关的操作 // *********************************************************************** 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 System; using System.Collections.Generic; using System.Linq; using Infrastructure.Helpers; using Microsoft.Extensions.Logging; using StackExchange.Profiling; namespace OpenAuth.WebApi.Controllers { /// /// /// 登录及与登录信息获取相关的接口 /// [Route("api/[controller]/[action]")] [ApiController] [ApiExplorerSettings(GroupName = "登录验证_Check")] public class CheckController : ControllerBase { private readonly IAuth _authUtil; private ILogger _logger; private AuthStrategyContext _authStrategyContext; public CheckController(IAuth authUtil, ILogger logger) { _authUtil = authUtil; _logger = logger; _authStrategyContext = _authUtil.GetCurrentUser(); } /// /// 获取登录用户资料 /// /// [HttpGet] public Response GetUserProfile() { var resp = new Response(); try { resp.Result = _authStrategyContext.User.MapTo(); } catch (Exception e) { resp.Code = 500; resp.Message = e.Message; } return resp; } /// /// 检验token是否有效 /// /// The token. /// 备用参数. [HttpGet] 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; } /// /// 获取登录用户的所有可访问的角色 /// [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; } /// /// 获取当前登录用户可访问的字段 /// /// 模块的Code,如Category /// [HttpGet] public Response> GetProperties(string moduleCode) { var result = new Response>(); try { result.Result = _authStrategyContext.GetTableColumns(moduleCode); } catch (Exception ex) { result.Code = 500; result.Message = ex.InnerException?.Message ?? ex.Message; } return result; } /// /// 获取登录用户的所有可访问的组织信息 /// [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; } /// /// 加载机构的全部下级机构 /// /// 机构ID /// [HttpGet] public TableData GetSubOrgs(string orgId) { string cascadeId = ".0."; if (!string.IsNullOrEmpty(orgId)) { 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(), }; } /// /// 获取登录用户的所有可访问的模块及菜单,以列表形式返回结果 /// [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 Response>> GetModulesTree() { var result = new Response>>(); try { result.Result = _authStrategyContext.Modules.GenerateTree(u => u.Id, u => u.ParentId); } 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> GetResources() { var result = new Response>(); try { result.Result = _authStrategyContext.Resources; } 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; } /// /// 根据token获取用户名称 /// [HttpGet] 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; } /// /// 登录接口 /// /// 登录参数 /// [HttpPost] [AllowAnonymous] public LoginResult Login(PassportLoginRequest request) { var result = new LoginResult(); try { result = _authUtil.Login(request.AppKey, request.Account, request.Password); } catch (Exception ex) { result.Code = 500; result.Message = ex.Message; } return result; } /// /// 注销登录 /// /// /// 备用参数. [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; } } }