using e_suite.API.Common; using e_suite.API.Common.models; using e_suite.Utilities.Pagination; using eSuite.API.security; using eSuite.API.Utilities; using eSuite.Core.Miscellaneous; using eSuite.Core.Security; using Microsoft.AspNetCore.Mvc; namespace eSuite.API.Controllers; /// /// Allows creation and editing of security roles /// [Route("api/[controller]")] [ApiController] public class RoleController : ESuiteControllerBase { private IRoleManager _roleManager; /// /// Constructor for Role Controller /// /// public RoleController(IRoleManager roleManager) { _roleManager = roleManager; } /// /// Returns a list of all the roles in the system /// /// This returns all the roles in the system that are not soft deleted. Use the Id or Guid column to specify a domain. /// /// The ID of the domain. If null, will try to access all domains /// /// [Route("roles")] [HttpGet] [AccessKey(SecurityAccess.ViewRole)] [ProducesResponseType(StatusCodes.Status200OK)] public async Task GetRoles( [FromQuery] Paging paging, [FromQuery] GeneralIdRef domain, CancellationToken cancellationToken = default! ) { var result = await _roleManager.GetRoles(paging, domain, cancellationToken); return Ok(result); } /// /// Returns the details of a specific role /// /// This returns all the sequences in the system that are not soft deleted. [Route("role")] [HttpGet] [AccessKey(SecurityAccess.ViewRole)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetRole( [FromQuery] long? id, [FromQuery] Guid? guid, CancellationToken cancellationToken = default! ) { var generalIdRef = new GeneralIdRef { Id = id, Guid = guid }; var result = await _roleManager.GetRole(generalIdRef, cancellationToken); return Ok(result); } /// /// Create a role /// /// Contains the data required to create a role /// [Route("role")] [HttpPost] [AccessKey(SecurityAccess.AddRole)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task CreateRole( [FromBody] CreateRole createRole, CancellationToken cancellationToken = default! ) { await _roleManager.CreateRole(AuditUserDetails, createRole, cancellationToken); return Ok(); } /// /// Edit a role /// /// All the fields can be edited except the Id and Guid field /// Contains the details of the updated sequence /// [Route("role")] [HttpPut] [AccessKey(SecurityAccess.EditRole)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task EditRole( [FromBody] EditRole editRole, CancellationToken cancellationToken = default! ) { await _roleManager.EditRole(AuditUserDetails, editRole, cancellationToken); return Ok(); } /// /// Deletes a role /// /// This will perform a soft delete action. /// Either the id or the Guid of the role /// [Route("role")] [HttpDelete] [AccessKey(SecurityAccess.DeleteRole)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task DeleteRole( GeneralIdRef generalIdRef, CancellationToken cancellationToken = default! ) { await _roleManager.DeleteRole(AuditUserDetails, generalIdRef, cancellationToken); return Ok(); } /// /// Returns a list of all the roles in the system /// /// /// This returns all the roles in the system that are not soft deleted. Use the Id or Guid column to specify a domain. /// /// /// /// [Route("roleUsers")] [HttpGet] [AccessKey(SecurityAccess.ViewRoleUsers)] [ProducesResponseType(StatusCodes.Status200OK)] public async Task GetRoleUsers( [FromQuery] Paging paging, [FromQuery] GeneralIdRef roleId, CancellationToken cancellationToken = default! ) { var result = await _roleManager.GetRoleUsers(paging, roleId, cancellationToken); return Ok(result); } /// /// Deletes a role /// /// This will perform a soft delete action. /// The ids needed to identify which role and user combination /// [Route("roleUsers")] [HttpPost] [AccessKey(SecurityAccess.AddRoleUser)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task AddRoleUser( [FromBody] UserRoleIds userRoleIds, CancellationToken cancellationToken = default! ) { await _roleManager.AddRoleUser(AuditUserDetails, userRoleIds, cancellationToken); return Ok(); } /// /// Deletes a role /// /// This will perform a soft delete action. /// The ids needed to identify which role and user combination /// [Route("roleUsers")] [HttpDelete] [AccessKey(SecurityAccess.DeleteRoleUser)] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task DeleteRoleUser( [FromBody] UserRoleIds userRoleIds, CancellationToken cancellationToken = default! ) { await _roleManager.DeleteRoleUser(AuditUserDetails, userRoleIds, cancellationToken); return Ok(); } /// /// Returns a list of all the access rights available in the system. /// /// This is the master list of access rights that may be assigned to roles. /// /// /// [Route("accessList")] [HttpGet] [AccessKey(SecurityAccess.ViewAccessList)] [ProducesResponseType(StatusCodes.Status200OK)] public async Task GetAccessList( [FromQuery] Paging paging, CancellationToken cancellationToken = default! ) { var result = await _roleManager.GetAccessList(paging, cancellationToken); return Ok(result); } /// /// Returns a list of all the access rights assigned to roles. /// /// /// /// [Route("roleAccess")] [HttpGet] [AccessKey(SecurityAccess.ViewRoleAccess)] [ProducesResponseType(StatusCodes.Status200OK)] public async Task GetRoleAccess( [FromQuery] Paging paging, CancellationToken cancellationToken = default! ) { var result = await _roleManager.GetRoleAccess(paging, cancellationToken); return Ok(result); } /// /// /// /// /// /// [Route("roleAccess")] [HttpPost] [AccessKey(SecurityAccess.EditRoleAccess)] [ProducesResponseType(StatusCodes.Status200OK)] public async Task PostRoleAccess( [FromBody] AddRoleSecurityAccess accessToAdd, CancellationToken cancellationToken = default! ) { await _roleManager.AddRoleSecurityAccess(AuditUserDetails, accessToAdd, cancellationToken); return Ok(); } /// /// /// /// /// /// [Route("roleAccess")] [HttpDelete] [AccessKey(SecurityAccess.Everyone)] [ProducesResponseType(StatusCodes.Status200OK)] public async Task DeleteRoleAccess( [FromBody] DeleteRoleSecurityAccess accessToRemove, CancellationToken cancellationToken = default! ) { await _roleManager.DeleteRoleSecurityAccess(AuditUserDetails, accessToRemove, cancellationToken); return Ok(); } }