Files
continuousimprovement/src/Strata.ContinuousImprovement.Api/Controllers/StrategicOpportunitySecurityController.cs
T

52 lines
2.6 KiB
C#

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Strata.ContinuousImprovement.Biz.OpportunityRoleAssignment;
using Strata.ContinuousImprovement.Biz.StrategicOpportunities;
using Strata.CoreLib.Claims.Extensions;
using System.Collections.Generic;
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Linq;
namespace Strata.ContinuousImprovement.Api.Controllers
{
[ApiController]
[ApiVersion("1.0")]
[Route("api/v{api-version:apiVersion}/[controller]")]
public class StrategicOpportunitySecurityController : ControllerBase
{
private readonly IStrategicOpportunityService _strategicOpportunityService;
private readonly IOpportunityRoleAssignmentService _opportunityRoleAssignmentService;
public StrategicOpportunitySecurityController(IStrategicOpportunityService strategicOpportunityService, IOpportunityRoleAssignmentService opportunityRoleAssignmentService)
{
_strategicOpportunityService = strategicOpportunityService;
_opportunityRoleAssignmentService = opportunityRoleAssignmentService;
}
[HttpGet("{lootId}")]
public async Task<RoleAssignmentView> GetUserPermissions(long lootId, CancellationToken cancellationToken)
=> await _opportunityRoleAssignmentService.GetUserRoleAssignmentsAsync(lootId, cancellationToken);
[HttpGet("{lootId}/[action]")]
public async Task<IEnumerable<OpportunityRoleAssignmentView>> GetSimpleSecurities(long lootId, CancellationToken cancellationToken)
=> await _opportunityRoleAssignmentService.GetRoleAssignmentsAsync(lootId, cancellationToken);
[HttpPut("{lootId}/[action]")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<ActionResult<bool>> SetSimpleSecurities(long lootId, [FromBody] List<OpportunityRoleAssignmentView> permissionSettings, CancellationToken cancellationToken)
{
if (permissionSettings.Any(ps => ps.LootId != lootId)) { return BadRequest(); }
var roleAssignments = await _opportunityRoleAssignmentService.GetUserRoleAssignmentsAsync(lootId, cancellationToken);
var isSecurable = roleAssignments.CanSecure;
var userGuid = User?.GetUserGuid() ?? Guid.NewGuid();
if (!User.IsSdtEmployee() && !isSecurable) return Ok(false);
await _opportunityRoleAssignmentService.SaveRoleAssignmentsAsync(lootId, permissionSettings, cancellationToken);
return Ok(true);
}
}
}