AppMenu : Implement Sidebar Menu with Permission-based Access Control #112
@ -134,8 +134,6 @@ namespace Marco.Pms.Services.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[HttpPut("sidebar/{sectionId}/items/{itemId}")]
|
||||
public async Task<IActionResult> UpdateMenuItem(Guid sectionId, Guid itemId, [FromBody] MenuItemDto updatedMenuItem)
|
||||
{
|
||||
@ -231,73 +229,85 @@ namespace Marco.Pms.Services.Controllers
|
||||
var loggedUser = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var employeeId = loggedUser.Id;
|
||||
|
||||
var menus = await _sideBarMenuHelper.GetAllMenuSectionsAsync();
|
||||
|
||||
foreach (var menu in menus)
|
||||
try
|
||||
{
|
||||
var allowedItems = new List<MenuItem>();
|
||||
|
||||
foreach (var item in menu.Items)
|
||||
var menus = await _sideBarMenuHelper.GetAllMenuSectionsAsync();
|
||||
|
||||
foreach (var menu in menus)
|
||||
{
|
||||
bool isAllowed = false;
|
||||
var allowedItems = new List<MenuItem>();
|
||||
|
||||
if (item.PermissionKeys == null || !item.PermissionKeys.Any())
|
||||
foreach (var item in menu.Items)
|
||||
{
|
||||
isAllowed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var pk in item.PermissionKeys)
|
||||
bool isAllowed = false;
|
||||
|
||||
if (item.PermissionKeys == null || !item.PermissionKeys.Any())
|
||||
{
|
||||
if (Guid.TryParse(pk, out var permissionId))
|
||||
isAllowed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var pk in item.PermissionKeys)
|
||||
{
|
||||
if (await _permissions.HasPermission(permissionId,employeeId))
|
||||
if (Guid.TryParse(pk, out var permissionId))
|
||||
{
|
||||
isAllowed = true;
|
||||
break;
|
||||
if (await _permissions.HasPermission(permissionId, employeeId))
|
||||
{
|
||||
isAllowed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isAllowed)
|
||||
{
|
||||
|
||||
if (item.Submenu != null && item.Submenu.Any())
|
||||
if (isAllowed)
|
||||
{
|
||||
var allowedSubmenus = new List<SubMenuItem>();
|
||||
foreach (var sm in item.Submenu)
|
||||
|
||||
if (item.Submenu != null && item.Submenu.Any())
|
||||
{
|
||||
if (sm.PermissionKeys == null || !sm.PermissionKeys.Any())
|
||||
var allowedSubmenus = new List<SubMenuItem>();
|
||||
foreach (var sm in item.Submenu)
|
||||
{
|
||||
allowedSubmenus.Add(sm);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var pk in sm.PermissionKeys)
|
||||
if (sm.PermissionKeys == null || !sm.PermissionKeys.Any())
|
||||
{
|
||||
if (Guid.TryParse(pk, out var permissionId))
|
||||
allowedSubmenus.Add(sm);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var pk in sm.PermissionKeys)
|
||||
{
|
||||
if (await _permissions.HasPermission(permissionId,employeeId))
|
||||
if (Guid.TryParse(pk, out var permissionId))
|
||||
{
|
||||
allowedSubmenus.Add(sm);
|
||||
break;
|
||||
if (await _permissions.HasPermission(permissionId, employeeId))
|
||||
{
|
||||
allowedSubmenus.Add(sm);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
item.Submenu = allowedSubmenus;
|
||||
}
|
||||
item.Submenu = allowedSubmenus;
|
||||
}
|
||||
|
||||
allowedItems.Add(item);
|
||||
allowedItems.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
menu.Items = allowedItems;
|
||||
}
|
||||
|
||||
menu.Items = allowedItems;
|
||||
_logger.LogInfo("Fetched Sidebar Menu");
|
||||
return Ok(ApiResponse<object>.SuccessResponse(menus, "SideBar Menu Fetched successfully"));
|
||||
}
|
||||
catch (Exception ex) {
|
||||
|
||||
_logger.LogError(ex, "Error Occurred while Updating Fetching Menu");
|
||||
return StatusCode(500, ApiResponse<object>.ErrorResponse("Server Error", ex, 500));
|
||||
}
|
||||
|
||||
return Ok(menus);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user