网站首页 网站源码
using Dpz.Core.Public.ViewModel.Request;
using Dpz.Core.Public.ViewModel.Response;
namespace Dpz.Core.WebApi.Controllers;
/// <summary>
/// 账号管理
/// </summary>
[ApiController, Route("api/[controller]"), Authorize(Policy = "System")]
public class AccountController(
IAccountService accountService,
IConfiguration configuration,
IAccountTokenService accountTokenService,
IUserHistoryService userHistoryService
) : ControllerBase
{
/// <summary>
/// 获取账号列表
/// </summary>
/// <returns></returns>
[HttpGet]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType<List<VmUserInfo>>(StatusCodes.Status200OK)]
public async Task<IActionResult> GetAccounts(
[FromQuery] AccountQueryParameterDto parameter
)
{
var list = await accountService.GetPageAsync(
parameter.PageIndex,
parameter.PageSize,
parameter.Account
);
foreach (var item in list)
{
if (!item.Avatar.StartsWith("http", StringComparison.CurrentCultureIgnoreCase))
{
item.Avatar = configuration["WebHost"] + item.Avatar;
}
}
list.AddPaginationMetadata(Response.Headers);
return Ok(list);
}
/// <summary>
/// 获取账号信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id}")]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType<VmUserInfo>(StatusCodes.Status200OK)]
public async Task<IActionResult> GetAccount(string id)
{
var account = await accountService.GetOneUserAsync(id);
return Ok(account);
}
/// <summary>
/// 启用或禁用账号
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPatch("{id}")]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> Enable(string id)
{
await accountService.ToEnableAsync(id);
return NoContent();
}
/// <summary>
/// 修改密码
/// </summary>
/// <param name="account"></param>
/// <returns></returns>
[HttpPatch("change-password")]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> ChangePassword([FromBody] AccountChangPasswordDto account)
{
await accountService.ChangePwdByAdminAsync(account.Account, account.Password);
return NoContent();
}
/// <summary>
/// 创建账号
/// </summary>
/// <param name="account"></param>
/// <returns></returns>
[HttpPost]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> CreateAccount([FromBody] AccountCreateDto account)
{
await accountService.CreateAccountAsync(account.Account, account.Name, account.Password);
return NoContent();
}
/// <summary>
/// 账号是否存在
/// </summary>
/// <param name="account"></param>
/// <returns></returns>
[HttpGet("exists/{account}")]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType<object>(StatusCodes.Status200OK)]
public async Task<IActionResult> IsExists(string account)
{
var isExists = await accountService.IsExists(account);
return Ok(new { isExists });
}
/// <summary>
/// 获取刷新tokens (登录记录)
/// </summary>
/// <param name="account">账号</param>
/// <param name="used">是否使用</param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
[HttpGet("tokens")]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType<List<AccountTokenResponse>>(StatusCodes.Status200OK)]
public async Task<IActionResult> GetTokens(
[FromQuery] string account,
[FromQuery] bool? used,
[FromQuery] int pageIndex = 1,
[FromQuery] int pageSize = 20
)
{
var data = await accountTokenService.GetPageListAsync(account, used, pageIndex, pageSize);
data.AddPaginationMetadata(Response.Headers);
return Ok(data);
}
/// <summary>
/// 获取更改过的属性
/// </summary>
/// <returns></returns>
[HttpGet("history/properties")]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType<List<string>>(StatusCodes.Status200OK)]
public async Task<IActionResult> ChangeProperties()
{
var data = await userHistoryService.GetChangedPropertiesAsync();
return Ok(data);
}
/// <summary>
/// 获取用户更改历史记录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet("history/user")]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType<List<UserHistoryResponse>>(StatusCodes.Status200OK)]
public async Task<IActionResult> GetUserHistory(
[FromQuery] UserHistoryRequest request
)
{
var data = await userHistoryService.GetPagedListAsync(request);
data.AddPaginationMetadata(Response.Headers);
return Ok(data);
}
}
上述代码是一个 ASP.NET Core Web API 控制器,名为 AccountController
,用于管理用户账号的相关操作。以下是该控制器中各个方法的功能解释:
Dpz.Core.WebApi.Controllers
ApiController
: 指定该类是一个 API 控制器。Route("api/[controller]")
: 定义路由模板,[controller]
会被替换为控制器的名称(即 Account
)。Authorize(Policy = "System")
: 该控制器的所有操作都需要通过名为 "System" 的授权策略进行身份验证。GetAccounts
AccountQueryParameterDto
,用于分页和过滤。GetAccount
id
,账号的唯一标识符。Enable
id
,账号的唯一标识符。ChangePassword
AccountChangPasswordDto
,包含账号和新密码。CreateAccount
AccountCreateDto
,包含账号、名称和密码。IsExists
account
,要检查的账号。GetTokens
account
(账号)、used
(是否使用)、pageIndex
(页码)、pageSize
(每页大小)。ChangeProperties
GetUserHistory
UserHistoryRequest
,包含查询条件。该控制器提供了一系列与用户账号管理相关的 API 接口,包括获取账号列表、获取账号信息、启用/禁用账号、修改密码、创建账号、检查账号是否存在、获取登录记录、获取更改过的属性和获取用户更改历史记录等功能。所有操作都需要经过身份验证,确保安全性。