Files
tiku-backend.net/Tiku.Api/Controllers/PlatformStaffAccessController.cs

78 lines
2.9 KiB
C#

using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Tiku.Api.Contracts;
using Tiku.Api.OpenApi;
using Tiku.Application.Auth;
using Tiku.Application.PlatformAdmin;
using Tiku.Application.Security;
using Tiku.Domain.Platform;
namespace Tiku.Api.Controllers;
[ApiController]
[Tags("平台端-平台管理")]
[Authorize(Policy = BackendPermissions.PlatformDashboardView)]
[Produces("application/json")]
[Route("api/platform")]
public sealed class PlatformStaffAccessController(
IPlatformStaffAccessService service,
IAuthAdministrationService authAdministrationService,
PlatformAdminActorResolver actorResolver) : ControllerBase
{
[HttpGet("staff")]
[Authorize(Policy = BackendPermissions.PlatformStaffManage)]
[EndpointSummary("查询平台员工列表")]
[ProducesResponseType<PlatformStaffList>(StatusCodes.Status200OK)]
public async Task<ActionResult<PlatformStaffList>> Staff(
[FromQuery] PlatformAdminQueryDto query,
CancellationToken cancellationToken)
{
return Ok(await service.GetStaffAsync(actorResolver.Resolve(), query.ToQuery(), cancellationToken));
}
[HttpPut("staff")]
[Authorize(Policy = BackendPermissions.PlatformStaffManage)]
[EndpointSummary("创建或更新平台员工")]
[ProducesResponseType<PlatformStaffItem>(StatusCodes.Status200OK)]
public async Task<ActionResult<PlatformStaffItem>> UpsertStaff(
UpsertPlatformStaffDto request,
CancellationToken cancellationToken)
{
return Ok(await service.UpsertStaffAsync(actorResolver.Resolve(), request.ToCommand(), cancellationToken));
}
[HttpPatch("staff/status")]
[Authorize(Policy = BackendPermissions.PlatformStaffManage)]
[EndpointSummary("启用或禁用平台员工")]
[ProducesResponseType<PlatformStaffItem>(StatusCodes.Status200OK)]
public async Task<ActionResult<PlatformStaffItem>> StaffStatus(
UpdatePlatformStaffStatusDto request,
CancellationToken cancellationToken)
{
return Ok(await service.UpdateStaffStatusAsync(actorResolver.Resolve(), request.ToCommand(),
cancellationToken));
}
[HttpPost("staff/{userId:guid}/password-reset")]
[Authorize(Policy = BackendPermissions.PlatformStaffManage)]
[EndpointSummary("为平台员工设置一次性临时密码")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
public async Task<IActionResult> ResetStaffPassword(
Guid userId,
AdministrativePasswordResetDto request,
CancellationToken cancellationToken)
{
var actor = actorResolver.Resolve();
await authAdministrationService.ResetPasswordAsync(
new AdministrativePasswordResetRequest(
actor.UserId,
userId,
null,
request.TemporaryPassword,
request.Reason),
cancellationToken);
return NoContent();
}
}