public async Task <UserPermission> Handle(GetUserPermissionRequest request, CancellationToken cancellationToken) { RoleAssignment roleAssignment; if (request.RoleAssignmentID == Guid.Empty) { roleAssignment = dbContext.RoleAssignments.Include(p => p.Role).Include(p => p.Scope) .Where(p => p.Principal.PrincipalCode == currentUserInfo.UserCode).OrderBy(p => p.Role.SortNO).First(); } else { roleAssignment = dbContext.RoleAssignments.Include(p => p.Role).Include(p => p.Scope) .Where(p => p.ID == request.RoleAssignmentID).First(); } if (roleAssignment == null) { throw new FriendlyException() { ExceptionCode = (int)HttpStatusCode.NotFound, ExceptionMessage = $"The RoleAssignment id: {request.RoleAssignmentID} does not exist." }; } UserPermission currentUserPermission = new UserPermission(); currentUserPermission.RoleCode = roleAssignment.Role.RoleCode; List <string> allowCodes = dbContext.RolePermissions.Where(p => p.Role.ID == roleAssignment.RoleID).Select(p => p.ResourceCode).ToList(); List <ResourceData> resources = await systemDataCache.GetResourceData(); var menuCodes = resources.Where(p => p.ResourceType == EnumResourceType.Menu).Select(p => p.ResourceCode); var actionCodes = resources.Where(p => p.ResourceType == EnumResourceType.Action).Select(p => p.ResourceCode); var btnCodes = resources.Where(p => p.ResourceType == EnumResourceType.Button).Select(p => p.ResourceCode); currentUserPermission.AllowMenuCodes = menuCodes.Where(p => allowCodes.Contains(p)).ToList(); currentUserPermission.AllowActionCodes = actionCodes.Where(p => allowCodes.Contains(p)).ToList(); currentUserPermission.AllowBtnCodes = btnCodes.Where(p => allowCodes.Contains(p)).ToList(); currentUserPermission.ScopeCode = roleAssignment.Scope.ScopeCode; currentUserPermission.AllowScopeCodes = dbContext.Scopes.Where(p => p.ScopeCode.StartsWith(roleAssignment.Scope.ScopeCode)).Select(p => p.ScopeCode).ToList(); await userPermissionCache.SetCurrentUserPermission(currentUserPermission); return(currentUserPermission); }
public async Task <List <UserMenu> > Handle(GetUserMenusRequest request, CancellationToken cancellationToken) { UserPermission userPermission = await userPermissionCache.GetCurrentUserPermission(); List <ResourceData> resources = await systemDataCache.GetResourceData(); resources = resources.Where(p => p.ResourceType == EnumResourceType.Menu && userPermission.AllowMenuCodes.Contains(p.ResourceCode)).ToList(); var rootResource = resources.First(p => p.ID == Guid.Parse("88888888-8888-8888-8888-888888888888")); resources.Remove(rootResource); List <UserMenu> userMenus = new List <UserMenu>(); UserMenu rootMenu = new UserMenu() { MenuCode = rootResource.ResourceCode, MenuName = rootResource.ResourceName, SortNO = rootResource.SortNO }; userMenus.Add(rootMenu); BuildUserMenus(resources, rootResource, rootMenu); return(userMenus); }