TourIAm/TIAMWebApp/Server/Controllers/UserPermissionAPIController.cs

140 lines
5.3 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using System.Text.Json;
using TIAM.Database.DataLayers.ServiceProviders;
using TIAM.Database.DataLayers.Users;
using TIAM.Entities.Permissions;
using TIAM.Entities.Products;
using TIAM.Entities.Products.DTOs;
using TIAM.Entities.ServiceProviders;
using TIAM.Entities.Users;
using TIAMWebApp.Shared.Application.Models;
using TIAMWebApp.Shared.Application.Models.PageModels;
namespace TIAMWebApp.Server.Controllers
{
[Authorize]
[ApiController]
[Route("api/[controller]")]
public class UserPermissionAPIController : ControllerBase
{
private ServiceProviderDal _serviceProviderDal;
private readonly ILogger<UserPermissionAPIController> _logger;
public UserPermissionAPIController(ILogger<UserPermissionAPIController> logger, ServiceProviderDal serviceProviderDal)
{
_logger = logger;
_serviceProviderDal = serviceProviderDal;
}
//1. create a permission to be assigned to users to access a context
//public Task CreatePermissionForContextByContextIdAsync(Guid contextId);
//2. get the contexts where the user has permission
[AllowAnonymous]
[HttpGet]
[Route("GetPermissionContextByUserId")]
public async Task<IActionResult> GetPermissionContextByUserId(Guid userId)
{
if (userId == Guid.Empty)
{
return BadRequest("UserId is required");
}
else
{
Console.WriteLine($"GetPermissionContextByUserId called with userId: {userId}");
//List<AssignedPermissionModel> response = await _serviceProviderDal.GetPermissionModelByUserIdAsync(userId);
//return Ok(response);
return Ok();
}
}
//3. get permissions of all users and groups for context by contextId
[AllowAnonymous]
[HttpGet]
[Route("GetPermissionsForContextByContextId")]
public async Task<IActionResult> GetPermissionsForContextByContextId(Guid contextId)
{
if (contextId == Guid.Empty)
{
return BadRequest("ContextId is required");
}
else
{
Console.WriteLine($"GetPermissionsForContextByContextId called with contextId: {contextId}");
Dictionary<Guid, int> permissionsDictionary = new Dictionary<Guid, int>();
var permissions = await _serviceProviderDal.GetPermissionsForContextByContextIdAsync(contextId);
return Ok(permissions);
}
}
//4. give a user permission to access a context
//public Task AssignPermissionToUserForContextAsync(Guid contextId, Guid userId);
[AllowAnonymous]
[HttpPost]
[Route("AssignPermissionToUserForContext")]
public async Task<IActionResult> AssignPermissionToUserForContext(AssignPermissionModel assignPermissionModel)
{
Console.WriteLine("AssignPermissionToUserForContext called");
if (assignPermissionModel == null)
{
return BadRequest("ContextId and UserId are required");
}
else
{
var response = await _serviceProviderDal.AssignPermissionToUserForContextAsync(assignPermissionModel.AssignedUser, assignPermissionModel.PermissionsType);
return Ok(response);
}
}
//5. remove a user's permission to access a context
//public Task RemovePermissionFromUserByContextIdAsync(Guid contextId, Guid permissionId, Guid userId);
//6. remove all permissions of a user for a context
//public Task RemoveAllPermissionsByContextIdAsync(Guid contextId, Guid userId);
//7. remove all permissions of a user (BAN user from all contexts, even the system)
//public Task RemoveAllPermissionsByUserIdAsync(Guid userId);
//8. create permission group
//public Task CreatePermissionGroupForContextAsync(Guid contextId, string name);
//9. add user to permission group
//public Task AddUserToPermissionGroupAsync(Guid permissionGroupId, Guid userId);
//10. create permission type
//public Task<bool> CreatePermissionTypeAsync(string name, Guid contextId, int bitValue);
[AllowAnonymous]
[HttpPost]
[Route("CreatePermissionType")]
public async Task<IActionResult> CreatePermissionType(string name, Guid contextId)
{
Console.WriteLine("CreatePermissionType called");
if (String.IsNullOrEmpty(name) || contextId == Guid.Empty)
{
return BadRequest("SerializedPermissionTypeModel is required");
}
else
{
PermissionsType permissionType = new PermissionsType(contextId, name);
var response = await _serviceProviderDal.CreatePermissionsTypeAsync(permissionType);
return Ok(response);
}
}
//11. get permission types for context
//public Task<List<PermissionsType>>? GetPermissionTypesForContextByContextIdAsync(Guid contextId);
//12. get permission groups for context
//public Task GetPermissionGroupsForContextByContextIdAsync(Guid contextId);
}
}