public static async Task <PermissionDetails> InsertOrMergePermissionAsync(CloudTable table, PermissionDetails entity) { if (entity == null) { throw new ArgumentNullException("entity"); } try { // Create the InsertOrReplace table operation TableOperation insertOrMergeOperation = TableOperation.InsertOrMerge(entity); // Execute the operation. TableResult result = await table.ExecuteAsync(insertOrMergeOperation); PermissionDetails insertedCustomer = result.Result as PermissionDetails; if (result.RequestCharge.HasValue) { Console.WriteLine("Request Charge of InsertOrMerge Operation: " + result.RequestCharge); } return(insertedCustomer); } catch (StorageException e) { Console.WriteLine(e.Message); Console.ReadLine(); throw; } }
public static async Task <PermissionDetails> RetrievePermissionUsingPointQueryAsync(CloudTable table, string partitionKey, string rowKey) { try { TableOperation retrieveOperation = TableOperation.Retrieve <PermissionDetails>(partitionKey, rowKey); TableResult result = await table.ExecuteAsync(retrieveOperation); PermissionDetails perDetails = result.Result as PermissionDetails; if (perDetails != null) { Console.WriteLine("\t{0}\t{1}\t{2}", perDetails.Access, perDetails.RowKey, perDetails.PartitionKey); } if (result.RequestCharge.HasValue) { Console.WriteLine("Request Charge of Retrieve Operation: " + result.RequestCharge); } return(perDetails); } catch (StorageException e) { Console.WriteLine(e.Message); Console.ReadLine(); throw; } }
public async Task <IActionResult> Edit(int id, [Bind("id,PermissionsId,UsersId,isDeleted,deleted_at,deleted_by,created_at,created_by,updated_at,updated_by")] PermissionDetails permissionDetails) { if (id != permissionDetails.id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(permissionDetails); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!PermissionDetailsExists(permissionDetails.id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(permissionDetails)); }
private void ClientOnGetSecurityAssociationsCompleted(object sender, GetSecurityAssociationsCompletedEventArgs e) { if (e.Result != null) { if (!e.Result.HasError) { var securityObject = sender as ManagementConsoleObject; if (securityObject != null) { securityObject.Load(e.Result.Result, e.Result.Result.IsInherited); var selectedItem = XTreeView.SelectedItem; if (selectedItem != null) { PermissionDetails.DataContext = null; var binding = new Binding { Source = XTreeView, Path = new PropertyPath("SelectedItem"), Mode = BindingMode.TwoWay, }; PermissionDetails.SetBinding(DataContextProperty, binding); PermissionDetails.Visibility = Visibility.Visible; XTreeView.SelectedItem = selectedItem; } } } else { SuperMessageBoxService.ShowError("Error Occurred", "An error occurred while retrieving the Glyma permissions."); } } }
public async Task <IActionResult> Create([Bind("id,PermissionsId,UsersId,isDeleted,deleted_at,deleted_by,created_at,created_by,updated_at,updated_by")] PermissionDetails permissionDetails) { if (ModelState.IsValid) { _context.Add(permissionDetails); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(permissionDetails)); }
/// <summary> /// Gets the user requests for the given community and for the given page. User should have moderator /// or owner/site admin permission on the community to get user request. /// </summary> /// <param name="userId">User who is reading the requests</param> /// <param name="communityId">Community for which requests are fetched</param> /// <param name="pageDetails">Page for which requests are fetched</param> /// <returns>List of user role requests</returns> public Task <PermissionDetails> GetUserPemissionRequests(long userId, long?communityId, PageDetails pageDetails) { this.CheckNotNull(() => new { pageDetails }); // Condition to get all the pending requests irrespective of community. Expression <Func <PermissionRequest, bool> > condition = (PermissionRequest pr) => pr.Approved == null; Func <PermissionRequest, object> orderBy = (PermissionRequest c) => c.RoleID; if (communityId.HasValue) { // If community is specified, get all the pending requests of the specified community. condition = (PermissionRequest pr) => pr.Approved == null && pr.CommunityID == communityId.Value; } else { // If no community id is specified, get all the community ids to which user is given role of moderator or // higher and get their pending requests. var userCommunityIds = _userRepository.GetUserCommunitiesForRole(userId, UserRole.Moderator, false); condition = (PermissionRequest pr) => pr.Approved == null && userCommunityIds.Contains(pr.CommunityID); } // Gets the total items satisfying the condition pageDetails.TotalCount = _permissionRequestRepository.GetItemsCount(condition); pageDetails.TotalPages = (pageDetails.TotalCount / pageDetails.ItemsPerPage) + ((pageDetails.TotalCount % pageDetails.ItemsPerPage == 0) ? 0 : 1); var permissionDetails = new PermissionDetails(); foreach (var item in _permissionRequestRepository.GetItems(condition, orderBy, true, (pageDetails.CurrentPage - 1) * pageDetails.ItemsPerPage, pageDetails.ItemsPerPage)) { var userRole = _userRepository.GetUserRole(userId, item.CommunityID); // 1. User has to be at least Moderator to know the permission request details of the community. // 2. In case of profile page, user might be moderator for few communities and not for others. So, need to send only the requests // of community to which user is moderator or higher. if (userRole >= UserRole.Moderator) { var permissionItem = new PermissionItem(); Mapper.Map(item, permissionItem); permissionItem.CurrentUserRole = userRole; permissionDetails.PermissionItemList.Add(permissionItem); permissionDetails.CurrentUserPermission = userRole.GetPermission(); } else if (communityId.HasValue) { // If user is not having contributor or higher role, he will get item not found or don't have permission exception page. // This message to be shown only in case of permissions page not for profile page. permissionDetails = null; } } return(Task.FromResult(permissionDetails)); }
private static async Task CarDataOpertaions(CloudTable table) { PermissionDetails permissionDetails = new PermissionDetails("Harp", "Avinava") { Access = "Granted" }; // Demonstrate how to insert the entity Console.WriteLine("Insert an Entity."); permissionDetails = await SamplesUtils.InsertOrMergePermissionAsync(table, permissionDetails); Console.WriteLine("Reading the Entity."); permissionDetails = await SamplesUtils.RetrievePermissionUsingPointQueryAsync(table, "Harp", "Avinava"); Console.WriteLine(); }
/// <summary> /// Gets the user permissions for the given community and for the given page. User should have at least /// contributor permission on the community to get user permissions. /// </summary> /// <param name="userId">User who is reading the permissions</param> /// <param name="communityId">Community for which permissions are fetched</param> /// <param name="pageDetails">Page for which permissions are fetched</param> /// <returns>List of permissions/user roles</returns> public Task <PermissionDetails> GetUserPemissions(long userId, long communityId, PageDetails pageDetails) { this.CheckNotNull(() => new { pageDetails }); Expression <Func <UserCommunities, bool> > condition = c => c.CommunityId == communityId; Func <UserCommunities, object> orderBy = c => c.RoleID; // Gets the total items satisfying the condition pageDetails.TotalCount = _userCommunitiesRepository.GetItemsCount(condition); pageDetails.TotalPages = (pageDetails.TotalCount / pageDetails.ItemsPerPage) + ((pageDetails.TotalCount % pageDetails.ItemsPerPage == 0) ? 0 : 1); // TODO: Passing the condition in a variable doesn't add the WHERE clause in SQL server. Need to work on this later. var items = _userCommunitiesRepository.GetItems(condition, orderBy, true, (pageDetails.CurrentPage - 1) * pageDetails.ItemsPerPage, pageDetails.ItemsPerPage); var permissionDetails = new PermissionDetails(); if (items != null && items.Any()) { var userRole = _userRepository.GetUserRole(userId, communityId); // User has to be at least contributor to know the permission details of the community. if (userRole >= UserRole.Contributor) { permissionDetails.CurrentUserPermission = userRole.GetPermission(); foreach (var item in items) { var permissionItem = new PermissionItem(); Mapper.Map(item, permissionItem); permissionItem.CurrentUserRole = userRole; permissionDetails.PermissionItemList.Add(permissionItem); } } else { // If user is not having contributor or higher role, he will get item not found or don't have permission exception page. permissionDetails = null; } } return(Task.FromResult(permissionDetails)); }
private void RestoreRootMapInheritanceCompleted(object sender, RestoreRootMapInheritanceCompletedEventArgs e) { var rootMap = sender as RootMap; if (rootMap != null) { rootMap.IsInherited = true; var project = _projects.FirstOrDefault(q => q.Id == rootMap.ParentId); if (project != null) { foreach (var groupPair in rootMap.PermissionGroups) { foreach (var group in groupPair) { group.IsEnabled = false; var value = project.GetValue(group.Group); group.IsSelected = value; group.ResetValue(value); } } var selectedItem = XTreeView.SelectedItem; if (selectedItem != null) { PermissionDetails.DataContext = null; var binding = new Binding { Source = XTreeView, Path = new PropertyPath("SelectedItem"), Mode = BindingMode.TwoWay, }; PermissionDetails.SetBinding(DataContextProperty, binding); PermissionDetails.Visibility = Visibility.Visible; XTreeView.SelectedItem = selectedItem; } Updates.Clear(); PermissionDetails.ApplyEnabled = false; } } }
public UserPermissionRevokedEvent(RevokeUserPermissionDTO dto) { ForId = dto.ForId; ById = dto.ById; foreach (var permission in dto.PermissionsToRevoke) { var reason = String.IsNullOrWhiteSpace(permission.Value.Reason) ? "Reason Not Specified": permission.Value.Reason; var p = new PermissionDetails { EventType = JsonConvert.SerializeObject(GetType().FullName), IsPending = false, Reason = reason, RequestDate = TimeStamp, RequestedBy = dto.ById, RequestedFor = dto.ForId }; PermissionsToRevoke[permission.Key] = p; } }
public UserPermissionsRequestedEvent(RequestUserPermissionsDTO dto) { foreach (var request in dto.Requests) { var reason = String.IsNullOrWhiteSpace(dto.Requests[request.Key].Reason) ? "Reason Not Specified" : dto.Requests[request.Key].Reason; var r = new PermissionDetails { EventType = JsonConvert.SerializeObject(GetType().FullName), IsPending = true, Reason = reason, RequestDate = DateTime.UtcNow, RequestedBy = dto.ById, RequestedFor = dto.ForId }; Requests[request.Key] = r; } }
/// <summary> /// Gets the user permission details for the given community /// </summary> /// <param name="communityId">Community for which permission details to be fetched</param> /// <param name="permissionsTab">Permission tab (Users/Requests) for which data to be fetched</param> /// <param name="currentPage">Current page to be rendered</param> /// <returns>ViewModel with permission details</returns> private async Task <PermissionViewModel> GetUserPermissionDetails(long?communityId, PermissionsTab permissionsTab, int currentPage) { var pageDetails = new PageDetails(currentPage) { ItemsPerPage = Constants.PermissionsPerPage }; PermissionDetails permissionDetails = null; if (permissionsTab == PermissionsTab.Users) { permissionDetails = await ProfileService.GetUserPemissions(CurrentUserId, communityId.Value, pageDetails); } else if (permissionsTab == PermissionsTab.Requests) { permissionDetails = await ProfileService.GetUserPemissionRequests(CurrentUserId, communityId, pageDetails); } else { permissionDetails = await ProfileService.GetUserPemissionRequests(CurrentUserId, null, pageDetails); } if (permissionDetails != null) { // Check if there is only one owner for the current community. var singleOwner = permissionDetails.PermissionItemList.Count(p => p.Role == UserRole.Owner) == 1; var permissionList = new List <PermissionDetailsViewModel>(); foreach (var permissionItem in permissionDetails.PermissionItemList) { var model = new PermissionDetailsViewModel() { Id = permissionItem.UserID, Name = permissionItem.Name, CommunityId = permissionItem.CommunityID, CommunityName = permissionItem.CommunityName, Comment = permissionItem.Comment, Date = permissionItem.Date, Role = permissionItem.Role, IsInherited = permissionItem.IsInherited, CurrentUserRole = permissionItem.CurrentUserRole }; model.Requested = model.Date.GetFormattedDifference(DateTime.UtcNow); model.CanShowEditLink = model.CanShowDeleteLink = true; if (model.Role == UserRole.Owner && (singleOwner || model.CurrentUserRole < UserRole.Owner)) { // 1. No edit/delete options should be shown if there is only one owner. // 2. Only owners and site administrators can edit/delete owners permissions. model.CanShowEditLink = model.CanShowDeleteLink = false; } else if (model.Id == CurrentUserId) { // No edit/delete options should be shown in users permission page for the logged in user model.CanShowEditLink = model.CanShowDeleteLink = false; } else if (permissionItem.IsInherited) { // If the role of user permission is is inherited, then user should not be allowed to delete. model.CanShowDeleteLink = false; // If the role of user permission is Owner and is inherited, then user should not be allowed to edit also. if (model.Role == UserRole.Owner) { model.CanShowEditLink = false; } } permissionList.Add(model); } var permissionViewModel = new PermissionViewModel( permissionDetails.CurrentUserPermission, permissionList, pageDetails, permissionsTab); return(permissionViewModel); } else { return(null); } }