Esempio n. 1
0
        private async Task <ActionResultResponse> UpdateRolePages(string roleId,
                                                                  IEnumerable <RolePagePermissionMeta> listRolePagePermissions)
        {
            var listRolePages = await _rolePageRepository.GetsByRoleId(roleId, true);

            if (listRolePages == null || !listRolePages.Any())
            {
                await DeleteAllRolePageByRoleId(roleId);

                var result = await AddNewRolePage(roleId, listRolePagePermissions);

                return(new ActionResultResponse(result, result <= 0
                    ? _sharedResourceService.GetString(ErrorMessage.SomethingWentWrong)
                    : _resourceService.GetString("Add new page to role successful.")));
            }

            // List roles page ids.
            var listPageIds = listRolePages.Select(x => x.PageId).ToList();

            // List new pages.
            var listNewPageIds = listRolePagePermissions.Select(x => x.PageId)
                                 .Except(listRolePages.Select(x => x.PageId).ToList());

            // List delete role page.
            var listDeletedPageIds = listPageIds.Except(listRolePagePermissions.Select(x => x.PageId));

            // List update role page.
            var listUpdatedPageIds = listPageIds.Intersect(listRolePagePermissions.Select(x => x.PageId));

            // Add new role page if not exists.
            await AddNewRolePage(roleId,
                                 listRolePagePermissions.Where(x => listNewPageIds.Contains(x.PageId)).ToList());

            // Update existings role page.
            await UpdateRolePagePermission();

            // Delete role page.
            await DeleteRolePage();

            return(new ActionResultResponse(1, _resourceService.GetString("Update role page succesful.")));

            async Task <int> UpdateRolePagePermission()
            {
                return(await _rolePageRepository
                       .UpdateRolePagePermission(roleId,
                                                 listRolePagePermissions.Where(x => listUpdatedPageIds.Contains(x.PageId)).ToList()));
            }

            async Task <int> DeleteRolePage()
            {
                return(await _rolePageRepository.DeleteByRoleIdAndPageIds(roleId, listDeletedPageIds.ToList()));
            }
        }