// *********************************************************************** // // AgileWebs // // *********************************************************************** using Asp.Versioning; using Core.Blueprint.Mongo; using Core.Thalos.Adapters; using Core.Thalos.Adapters.Attributes; using Core.Thalos.Adapters.Common.Constants; using Core.Thalos.Provider.Contracts; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Graph; using PermissionRequest = Core.Thalos.Domain.Contexts.Onboarding.Request.PermissionRequest; namespace LSA.Core.Thalos.API.Controllers { /// /// Handles all requests for permission authentication. /// [ApiVersion(MimeTypes.ApplicationVersion)] [Route("api/v{api-version:apiVersion}/[controller]")] [Produces(MimeTypes.ApplicationJson)] [Consumes(MimeTypes.ApplicationJson)] [ApiController] public class PermissionController(IPermissionProvider service) : ControllerBase { /// /// Gets all the permissions. /// /// The found entities. /// The roles found. /// The roles not found error. /// The service internal error. [HttpGet] [Consumes(MimeTypes.ApplicationJson)] [Produces(MimeTypes.ApplicationJson)] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] //[Permission("PermissionManagement.Read, RoleManagement.Read")] public async Task GetAllPermissionsAsync(CancellationToken cancellationToken) { var result = await service.GetAllPermissions(cancellationToken).ConfigureAwait(false); return Ok(result); } /// /// Gets all the permissions by permission identifiers. /// /// The list of permission identifiers. /// The found entities. /// The permissions found. /// The permissions not found error. /// The service internal error. [HttpPost] [Route(Routes.GetPermissionList)] [Consumes(MimeTypes.ApplicationJson)] [Produces(MimeTypes.ApplicationJson)] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] //[Permission("PermissionManagement.Read")] public async Task GetAllPermissionsByList([FromBody] string[] permissions, CancellationToken cancellationToken) { if (permissions == null || !permissions.Any()) { return BadRequest("Permissions identifiers are required."); } var result = await service.GetAllPermissionsByList(permissions, cancellationToken).ConfigureAwait(false); return Ok(result); } /// /// Gets the permission by identifier. /// /// The permission identifier. /// The found entity. /// The permission found. /// The permission not found error. /// The service internal error. [HttpGet] [Route(Routes.Id)] [Consumes(MimeTypes.ApplicationJson)] [Produces(MimeTypes.ApplicationJson)] [ProducesResponseType(typeof(PermissionAdapter), StatusCodes.Status200OK)] //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] //[Permission("PermissionManagement.Read")] public async Task GetPermissionByIdAsync([FromRoute] string id, CancellationToken cancellationToken) { var result = await service.GetPermissionById(id, cancellationToken).ConfigureAwait(false); if (result == null) { return NotFound("Entity not found"); } return Ok(result); } /// /// Creates a new permission. /// /// The permission to be added. /// The created entity. /// The permission created. /// The permission could not be created. /// The service internal e|ror. [HttpPost] [ProducesResponseType(typeof(PermissionAdapter), StatusCodes.Status201Created)] //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] //[Permission("PermissionManagement.Write")] public async Task CreatePermissionAsync([FromBody] PermissionRequest newPermission, CancellationToken cancellationToken) { var result = await service.CreatePermission(newPermission, cancellationToken).ConfigureAwait(false); return Created("CreatedWithIdAsync", result); } /// /// Updates a full permission by identifier. /// /// The permission to update. /// The permission identifier. /// The updated entity. /// The permission updated. /// The permission not found. /// The permission could not be updated. /// The service internal error. [HttpPut] [Route(Routes.Id)] [Consumes(MimeTypes.ApplicationJson)] [Produces(MimeTypes.ApplicationJson)] [ProducesResponseType(typeof(PermissionAdapter), StatusCodes.Status200OK)] //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] //[Permission("PermissionManagement.Write")] public async Task UpdatePermissionAsync([FromRoute] string id, PermissionAdapter entity, CancellationToken cancellationToken) { if (id != entity.Id?.ToString()) { return BadRequest("Permission ID mismatch"); } var result = await service.UpdatePermission(entity, cancellationToken).ConfigureAwait(false); return Ok(result); } /// /// Changes the status of the permission. /// /// The permission identifier. /// The new status of the permission. /// The updated entity. /// The permission updates. /// The permission not found. /// The permission could not be deleted. /// The service internal error. [HttpPatch] [Route(Routes.ChangeStatus)] [Consumes(MimeTypes.ApplicationJson)] [Produces(MimeTypes.ApplicationJson)] [ProducesResponseType(typeof(PermissionAdapter), StatusCodes.Status200OK)] //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] //[Permission("PermissionManagement.Write")] public async Task ChangePermissionStatus([FromRoute] string id, [FromRoute] StatusEnum newStatus, CancellationToken cancellationToken) { var result = await service.ChangePermissionStatus(id, newStatus, cancellationToken).ConfigureAwait(false); return Ok(result); } } }