using Abp.Domain.Repositories; using Abp.Domain.Uow; using Abp.Runtime.Caching; using Microsoft.AspNetCore.Mvc; using VberAdmin.Web.Models.Search; using VberZero; using VberZero.BaseSystem; using VberZero.Session; namespace VberAdmin.Web.Views.Shared.Components.TableToolBar; public class TableToolBarViewComponent : VberAdminViewComponent { public TableToolBarViewComponent(IRepository funRepository, ICacheManager cacheManager, IUnitOfWorkManager unitOfWorkManager) { FunRepository = funRepository; CacheManager = cacheManager; _unitOfWorkManager = unitOfWorkManager; } private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly IRepository FunRepository; protected readonly ICacheManager CacheManager; public async Task InvokeAsync(string activeMenu = "", object searchView = null) { ViewBag.ActiveMenu = activeMenu; var model = new TableToolBarViewModel(); try { model.Search = (VmSearch)searchView; } catch { model.Search = null; } if (string.IsNullOrEmpty(activeMenu)) { return View(model); } var permission = PermissionManager.GetPermissionOrNull(activeMenu); if (permission != null) { var userName = AbpSession.GetUserName(); foreach (var child in permission.Children) { if (await PermissionChecker.IsGrantedAsync(child.Name)) { var fun = await CacheManager.GetCache(VzConsts.CacheFunction) .GetAsync(child.Name, async () => { using var u = _unitOfWorkManager.Begin(); var f = await FunRepository.FirstOrDefaultAsync(a => a.PermissionName == child.Name); await u.CompleteAsync(); return f; }); if (fun == null || fun.FunctionType != VzDefinition.FunctionType.Button || fun.Script.ToLower() == "none") { continue; } if (fun.Script != null && (fun.Script.ToLower().StartsWith("admin") || fun.Script.ToLower().StartsWith("_admin")) && userName != VberZero.BaseSystem.Users.User.AdminUserName && userName != VberZero.BaseSystem.Users.User.SystemUserName) { continue; } var menu = new TableToolMenuViewModel(fun) { DisplayName = L(fun.PermissionName?.Replace(".", "") ?? "none") }; if (menu.Script.Contains("_")) { menu.Script = menu.Script.Substring(menu.Script.LastIndexOf("_", StringComparison.Ordinal)); model.Menu.Add(menu); } else { model.SelectionMenu.Add(menu); } } } } return View(model); } }