Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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.");
                }
            }
        }
Beispiel #5
0
        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));
        }
Beispiel #7
0
        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;
                }
            }
        }
Beispiel #10
0
        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;
            }
        }
Beispiel #11
0
        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;
            }
        }
Beispiel #12
0
        /// <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);
            }
        }