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();
}
}