private void Init(int selUserId, int userId, int appId) { var response = new UserManager().GetUserMenuResponses(userId, appId, selUserId); var args = new UserPermissionsResponseModel { UserId = response.UserId, AllPermissions = response.AllPermissions, CurrentPermissions = response.CurrentPermissions }; var treeNodes = GetTreeNodes(args); this.TreeNodesJson = JsonConvert.SerializeObject(treeNodes); }
private static ICollection <UserPermissionTreeNode> GetTreeNodes(UserPermissionsResponseModel model) { ICollection <UserPermissionTreeNode> allTreeNodes = new List <UserPermissionTreeNode>(); if (model.AllPermissions != null) { Map(model.AllPermissions, allTreeNodes); } ICollection <UserPermissionTreeNode> roleTreeNodes = new List <UserPermissionTreeNode>(); if (model.CurrentPermissions != null) { Map(model.CurrentPermissions, roleTreeNodes); } var intersectNodes = allTreeNodes.Intersect(roleTreeNodes, new UserPermissionTreeNodeEqualityComparer()).ToList(); Parallel.ForEach(intersectNodes, node => { node.Checked = true; node.Open = true; node.Disabled = false; }); var allExceptRoleNodes = allTreeNodes.Except(roleTreeNodes, new UserPermissionTreeNodeEqualityComparer()).ToList(); Parallel.ForEach(allExceptRoleNodes, node => { node.Checked = false; node.Open = false; node.Disabled = false; }); var roleExceptAllNodes = roleTreeNodes.Except(allTreeNodes, new UserPermissionTreeNodeEqualityComparer()).ToList(); Parallel.ForEach(roleExceptAllNodes, node => { node.Checked = true; node.Open = true; node.Disabled = true; }); var treeNodes = intersectNodes.Concat(allExceptRoleNodes).Concat(roleExceptAllNodes).ToList(); return(treeNodes); }
/////////////////////////////////////// public UserPermissionsResponseModel GetUserMenuResponses(int userId, int appId, int selUserId) { var ulistAll = GetMenuAndFunctionByUserId(userId, appId); var rlistAll = GetMenuAndFunctionByChkUserId(selUserId, appId); UserManagerDb.GetRolesByUserId(selUserId).ForEach(o => { rlistAll.AddRange(GetMenuAndFunctionByRoleId(o.RoleId, appId)); }); rlistAll = rlistAll.Distinct().ToList(); //GetMenuAndFunctionByRoleId(selUserId,appId); var responseModel = new UserPermissionsResponseModel { AllPermissions = ulistAll, CurrentPermissions = rlistAll, UserId = userId }; return(responseModel); }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "Permissions/{parameter}")] HttpRequest req, string parameter, ILogger log) { var correlationId = req.Headers.Any(r => r.Key == "x-correlation-id") ? req.Headers["x-correlation-id"].ToString() : string.Empty; var accessToken = req.Headers.Any(r => r.Key == "x-access-token") ? req.Headers["x-access-token"].ToString() : string.Empty; if (string.IsNullOrEmpty(accessToken)) { return(new ObjectResult($"Missing Access Token. Correlation ID: {correlationId}") { StatusCode = StatusCodes.Status401Unauthorized, }); } if (string.IsNullOrEmpty(parameter)) { return(new BadRequestObjectResult($"Missing parameters. Correlation ID: {correlationId}")); } try { var userDetails = await AzTokenController.Instance.GetTokenDetails(accessToken); var isValidAccessToken = userDetails != null && !string.IsNullOrEmpty(userDetails.UserPrincipalName); if (!isValidAccessToken) { return(new ObjectResult($"Invalid access token provided. Correlation ID: {correlationId}") { StatusCode = StatusCodes.Status401Unauthorized, }); } var cosmosDbController = new CosmosDbController(); var userRolesPermissions = await cosmosDbController.GetUserRolesPermissions(userDetails); if (userRolesPermissions == null) { return new ObjectResult($"No permissions defined for the specified token. Correlation Id: { correlationId}") { StatusCode = StatusCodes.Status401Unauthorized, } } ; var inputPermissions = parameter.Split(','); var response = new UserPermissionsResponseModel() { UserId = userRolesPermissions.Key, CorrelationId = correlationId, Timestamp = DateTime.Now.ToString(CultureInfo.InvariantCulture), Permissions = new List <PermissionResponseModel>() }; foreach (var role in inputPermissions) { response.Permissions.Add(userRolesPermissions.Permissions.Any(g => g.Key == role) ? new PermissionResponseModel { Key = role, IsAuthorized = true } : new PermissionResponseModel { Key = role, IsAuthorized = false }); } return(new JsonResult(response)); } catch (Exception exception) { log.LogError(exception.ToString()); return(new ObjectResult( $"Error occured. Please contact the system administrator. Correlation ID: {correlationId}") { StatusCode = StatusCodes.Status500InternalServerError, }); } }