コード例 #1
0
        protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, HasMenuAccessRequirement requirement)
        {
            var area       = _httpContextAccessor.HttpContext.Request.RouteValues.FirstOrDefault(m => m.Key == "area").Value?.ToString();
            var controller = _httpContextAccessor.HttpContext.Request.RouteValues.FirstOrDefault(m => m.Key == "controller").Value?.ToString();
            var action     = _httpContextAccessor.HttpContext.Request.RouteValues.FirstOrDefault(m => m.Key == "action").Value?.ToString();
            var menuRes    = _menuService.GetMenuByRouteDetails(area, controller, action);

            if (!menuRes.IsSucceed)
            {
                context.Succeed(requirement);
                return;
            }
            var user = await _userManager.GetUserAsync(context.User);

            if (user == null)
            {
                return;
            }
            var roles = await _userManager.GetRolesAsync(user);

            var result = _roleMenuService.HasAccessToMenu(menuRes.Data.Id, roles);

            if (result.IsSucceed)
            {
                context.Succeed(requirement);
            }
        }