// ***********************************************************************
// 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;
}
}
}