using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authorization; using Microsoft.IdentityModel.JsonWebTokens; using Microsoft.IdentityModel.Tokens; using OpenWarehouse.auth.lib.Model.Privilage; namespace OpenWarehouse.auth.api.Controller; [ApiController] [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] [Route("[controller]/[action]")] public class Privilege(UserManager userManager, PrivilegeManager privilegeManager, ILogger logger) : ControllerBase { [HttpPost] public async Task>> GetUserPrivilege() { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); logger.LogInformation("GetUserPrivilege request received for user: {UserId}", userId); if (userId == null) { logger.LogWarning("User ID not found in claims"); return BadRequest(); } var user = await userManager.FindByIdAsync(userId); if (user == null) { logger.LogWarning("User not found for ID: {UserId}", userId); return Unauthorized("User not found"); } var privilege = await privilegeManager.GetUserPrivilage(user); logger.LogInformation("Privileges retrieved for user {UserId}", userId); return Ok(privilege); } [HttpPost] [HasPrivilege(GlobalPrivilage.Privilege.GlobalEditRole)] public async Task CreatePrivilage([FromBody] CreatePrivilageModel privilage) { logger.LogInformation("CreatePrivilege request received for privilege: {Privilege}", privilage.Privilage); if (privilage is { Privilage: null }) { logger.LogWarning("Invalid privilege model provided"); return BadRequest(); } var ok = await privilegeManager.CreatePrivageAsync(privilage.Privilage); if (ok.IsSuccessed) { logger.LogInformation("Privilege created successfully"); return Created(); } else { logger.LogWarning("Failed to create privilege"); return BadRequest(); } } }