Spaces:
Running
Running
File size: 3,041 Bytes
4e645a3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using System.Collections.Generic;
using System.Security.Claims;
using System.Threading.Tasks;
using TaskTrackingSystem.Shared.Models.Menu;
using TaskTrackingSystem.WebApi.Infrastructure;
namespace TaskTrackingSystem.WebApi.Features.Menu
{
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class MenuController : ControllerBase
{
private readonly MenuService _menuService;
private readonly PermissionAuthorizationService _permissionAuthorizationService;
public MenuController(MenuService menuService, PermissionAuthorizationService permissionAuthorizationService)
{
_menuService = menuService;
_permissionAuthorizationService = permissionAuthorizationService;
}
[HttpGet]
[HttpGet("tree")]
public async Task<ActionResult<IEnumerable<MenuDto>>> GetMenuTree()
{
var roleId = User.GetRoleId();
if (roleId > 0)
{
var menuTree = await _menuService.GetMenuTreeByRoleIdAsync(roleId);
return Ok(menuTree);
}
var roleName = User.GetRoleName();
if (string.IsNullOrWhiteSpace(roleName))
{
return Forbid();
}
var menuTreeByName = await _menuService.GetMenuTreeByRoleNameAsync(roleName);
return Ok(menuTreeByName);
}
[HttpGet("all")]
[HttpGet("access-items")]
public async Task<ActionResult<IEnumerable<AccessMenuDto>>> GetAllAccessItems()
{
var canCreate = await _permissionAuthorizationService.CanAccessAsync(User, "api/Role", "Create");
var canUpdate = await _permissionAuthorizationService.CanAccessAsync(User, "api/Role", "Update");
if (!canCreate && !canUpdate)
{
return Forbid();
}
var menus = await _menuService.GetAllAccessItemsAsync();
return Ok(menus);
}
[HttpGet("access-codes")]
public async Task<ActionResult<IEnumerable<string>>> GetCurrentAccessCodes()
{
var roleId = User.GetRoleId();
var roleName = User.GetRoleName() ?? string.Empty;
var codes = await _menuService.GetCurrentAccessCodesAsync(roleId, roleName);
return Ok(codes);
}
/// <summary>
/// Returns a lightweight version string for the current user's role permissions.
/// Clients poll this to detect when an admin has changed permissions without fetching the full menu list.
/// </summary>
[HttpGet("version")]
public async Task<ActionResult<string>> GetMenuVersion()
{
var roleId = User.GetRoleId();
var roleName = User.GetRoleName() ?? string.Empty;
var version = await _menuService.GetMenuVersionAsync(roleId, roleName);
return Ok(version);
}
}
}
|