Class PermissionsController
- Namespace
- KadicAuth.Api.Controllers
- Assembly
- KadicAuth.Api.dll
[ApiController]
[Authorize]
[Route("api/[controller]")]
[Produces("application/json", new string[] { })]
public class PermissionsController : ControllerBase
- Inheritance
-
objectControllerBasePermissionsController
Constructors
PermissionsController(IMediator, ILogger<PermissionsController>, IStringLocalizer<AuthMessages>)
public PermissionsController(IMediator mediator, ILogger<PermissionsController> logger, IStringLocalizer<AuthMessages> localizer)
Parameters
mediatorIMediatorloggerILogger<PermissionsController>localizerIStringLocalizer<AuthMessages>
Methods
ActivatePermission(Guid, CancellationToken)
Activate a permission
[HttpPost("{id:guid}/activate")]
[EnableRateLimiting("sensitive-write")]
[Authorize(Policy = "AUTH_PERMISSIONS_UPDATE")]
[ProducesResponseType(200)]
[ProducesResponseType(typeof(Error), 404)]
public Task<ActionResult> ActivatePermission(Guid id, CancellationToken cancellationToken)
Parameters
idGuidcancellationTokenCancellationToken
Returns
- Task<ActionResult>
Remarks
Permission.Activate() existía en el dominio desde el principio y
ningún handler lo llamaba. Este endpoint lo cablea.
CreatePermission(CreatePermissionDto, CancellationToken)
Create a new permission
[HttpPost]
[EnableRateLimiting("sensitive-write")]
[Authorize(Policy = "AUTH_PERMISSIONS_CREATE")]
[ProducesResponseType(typeof(Result<Guid>), 201)]
[ProducesResponseType(typeof(Result), 400)]
[ProducesResponseType(typeof(Result), 409)]
public Task<ActionResult> CreatePermission(CreatePermissionDto request, CancellationToken cancellationToken)
Parameters
requestCreatePermissionDtocancellationTokenCancellationToken
Returns
- Task<ActionResult>
DeactivatePermission(Guid, CancellationToken)
Deactivate a permission
[HttpPost("{id:guid}/deactivate")]
[EnableRateLimiting("sensitive-write")]
[Authorize(Policy = "AUTH_PERMISSIONS_UPDATE")]
[ProducesResponseType(200)]
[ProducesResponseType(typeof(Error), 404)]
[ProducesResponseType(typeof(Error), 409)]
public Task<ActionResult> DeactivatePermission(Guid id, CancellationToken cancellationToken)
Parameters
idGuidcancellationTokenCancellationToken
Returns
- Task<ActionResult>
Remarks
Devuelve 409 si algún rol lo tiene concedido.
Desactivar no es cosmético: la resolución efectiva filtra por
Permission.IsActive, así que apagarlo revocaría el permiso al
instante a todos esos roles.
DeletePermission(Guid, CancellationToken)
Delete a permission
[HttpDelete("{id:guid}")]
[EnableRateLimiting("sensitive-write")]
[Authorize(Policy = "AUTH_PERMISSIONS_DELETE")]
[ProducesResponseType(200)]
[ProducesResponseType(typeof(Error), 400)]
[ProducesResponseType(typeof(Error), 404)]
[ProducesResponseType(typeof(Error), 409)]
public Task<ActionResult> DeletePermission(Guid id, CancellationToken cancellationToken)
Parameters
idGuidcancellationTokenCancellationToken
Returns
- Task<ActionResult>
Remarks
Devuelve 409 si algún rol tiene el permiso concedido. Antes se borraba directo: la FK hacia TenantRolesPermissions es NoAction, SQL Server rechazaba y —al no haber try/catch en el handler— el cliente recibía un 500. El borrado físico queda para permisos que nunca se concedieron; para el resto, desactivar.
GetPermissionByCode(string, CancellationToken)
Get a permission by its code
[HttpGet("by-code/{code}")]
[Authorize(Policy = "AUTH_PERMISSIONS_VIEW")]
[ProducesResponseType(typeof(PermissionDto), 200)]
[ProducesResponseType(typeof(Error), 404)]
[ProducesResponseType(typeof(Error), 400)]
public Task<ActionResult<PermissionDto>> GetPermissionByCode(string code, CancellationToken cancellationToken)
Parameters
codestringcancellationTokenCancellationToken
Returns
- Task<ActionResult<PermissionDto>>
GetPermissionById(string, CancellationToken)
Get permission by ID
[HttpGet("{id}")]
[Authorize(Policy = "AUTH_PERMISSIONS_VIEW")]
[ProducesResponseType(typeof(PermissionDto), 200)]
[ProducesResponseType(typeof(Error), 404)]
[ProducesResponseType(typeof(Error), 400)]
public Task<ActionResult<PermissionDto>> GetPermissionById(string id, CancellationToken cancellationToken)
Parameters
idstringcancellationTokenCancellationToken
Returns
- Task<ActionResult<PermissionDto>>
GetPermissionDependencies(Guid, CancellationToken)
Qué roles tienen concedido este permiso, y por tanto qué se rompería al desactivarlo o borrarlo.
[HttpGet("{id:guid}/dependencies")]
[Authorize(Policy = "AUTH_PERMISSIONS_VIEW")]
[ProducesResponseType(typeof(PermissionDependencies), 200)]
public Task<ActionResult<PermissionDependencies>> GetPermissionDependencies(Guid id, CancellationToken cancellationToken)
Parameters
idGuidcancellationTokenCancellationToken
Returns
- Task<ActionResult<PermissionDependencies>>
GetPermissionDiff(CancellationToken)
Returns the diff between permissions defined in code and those currently in the database: which are missing (ToInsert), which have a changed name (ToUpdate), and which exist in DB but are no longer declared in code (Orphaned).
[HttpGet("diff")]
[Authorize(Policy = "AUTH_PERMISSIONS_VIEW")]
public Task<IActionResult> GetPermissionDiff(CancellationToken cancellationToken)
Parameters
cancellationTokenCancellationToken
Returns
- Task<IActionResult>
GetPermissions(PaginatorRequestDto, CancellationToken)
Get all permissions paginated
[HttpGet]
[Authorize(Policy = "AUTH_PERMISSIONS_VIEW")]
[ProducesResponseType(typeof(PaginatorResponseDto<PermissionDto>), 200)]
[ProducesResponseType(typeof(Error), 400)]
public Task<ActionResult<PaginatorResponseDto<PermissionDto>>> GetPermissions(PaginatorRequestDto paginatorRequest, CancellationToken cancellationToken)
Parameters
paginatorRequestPaginatorRequestDtocancellationTokenCancellationToken
Returns
- Task<ActionResult<PaginatorResponseDto<PermissionDto>>>
GetRolesByPermissionSlug(string, CancellationToken)
Get all roles that have a specific permission assigned, looked up by permission code (slug)
[HttpGet("by-slug/{slug}/roles")]
[Authorize(Policy = "AUTH_PERMISSIONS_VIEW")]
[ProducesResponseType(typeof(List<RoleDto>), 200)]
[ProducesResponseType(typeof(Error), 400)]
public Task<ActionResult<List<RoleDto>>> GetRolesByPermissionSlug(string slug, CancellationToken cancellationToken)
Parameters
slugstringcancellationTokenCancellationToken
Returns
- Task<ActionResult<List<RoleDto>>>
SeedPermissions(SeedPermissionsCommand, CancellationToken)
Seed permissions in bulk: creates submodules if needed, inserts permissions that don't exist, and assigns all new permissions to every active Role and TenantRole. Idempotent — already-existing permissions are skipped.
[HttpPost("seed")]
[EnableRateLimiting("sensitive-write")]
[Authorize(Policy = "AUTH_PERMISSIONS_CREATE")]
[ProducesResponseType(typeof(Result<SeedPermissionsResult>), 200)]
[ProducesResponseType(typeof(Result), 400)]
[ProducesResponseType(typeof(Result), 422)]
public Task<ActionResult> SeedPermissions(SeedPermissionsCommand command, CancellationToken cancellationToken)
Parameters
commandSeedPermissionsCommandcancellationTokenCancellationToken
Returns
- Task<ActionResult>
UpdatePermission(Guid, UpdatePermissionDto, CancellationToken)
Update an existing permission
[HttpPut("{id:guid}")]
[EnableRateLimiting("sensitive-write")]
[Authorize(Policy = "AUTH_PERMISSIONS_UPDATE")]
[ProducesResponseType(typeof(Result), 200)]
[ProducesResponseType(typeof(Result), 404)]
[ProducesResponseType(typeof(Result), 400)]
public Task<ActionResult> UpdatePermission(Guid id, UpdatePermissionDto request, CancellationToken cancellationToken)
Parameters
idGuidrequestUpdatePermissionDtocancellationTokenCancellationToken
Returns
- Task<ActionResult>