コード例 #1
0
        protected override DriverResult Editor(ProjectItemPermissionsPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            // only applicable in the Creation mode
            if (part.ContentItem.VersionRecord.Published == true || part.ContentItem.Record.Versions.Count > 1)
            {
                return(null);
            }

            ProjectPermissionEditPostViewModel model = new ProjectPermissionEditPostViewModel();

            updater.TryUpdateModel(model, Prefix, null, null);

            if (model.ProjectId == null)
            {
                updater.AddModelError(Prefix + ".ProjectId", T("ProjectId is a required field"));
                return(this.Editor(part, shapeHelper));
            }

            var project = this.projectService.GetProject(model.ProjectId.Value);

            if (project == null)
            {
                updater.AddModelError(Prefix + ".ProjectId", T("There is no project with the given Id"));
                return(this.Editor(part, shapeHelper));
            }

            bool isOperatorOrCustomer = this.crmContentOwnershipService.IsCurrentUserOperator() || this.crmContentOwnershipService.IsCurrentUserCustomer();
            int  currentUserId        = this.orchardServices.WorkContext.CurrentUser.Id;

            EditContentPermissionViewModel editContentPermissionViewModel = null;

            if (model.VisibleToAll)
            {
                var projectContentPermissionPart = project.As <ContentItemPermissionPart>();

                if (projectContentPermissionPart == null)
                {
                    throw new System.ArgumentNullException("Project is not associated with ContentItemPermissionPart");
                }

                editContentPermissionViewModel = new EditContentPermissionViewModel
                {
                    AccessType          = ContentItemPermissionAccessTypes.SharedForView,
                    ContentIds          = new[] { part.ContentItem.Id },
                    RemoveOldPermission = false
                };

                var items = projectContentPermissionPart.Record.Items;
                if (items != null && items.Count > 0)
                {
                    var projectUsers = items.Where(c => c.User != null).Select(c => c.User).ToList();

                    // if current user is an operator or customer, then he/she will have Owner/edit access,so he/she must be removed from the list
                    // in order to prevent rewriting his privelege on the item
                    projectUsers = isOperatorOrCustomer ? projectUsers.Where(c => c.Id != currentUserId).ToList() : projectUsers;
                    editContentPermissionViewModel.Targets.AddRange(projectUsers.Select(c => new TargetContentItemPermissionViewModel
                    {
                        UserId  = c.Id,
                        Checked = true
                    }));

                    var projectGroups = items.Where(c => c.BusinessUnit != null).Select(c => c.BusinessUnit).ToList();
                    editContentPermissionViewModel.Targets.AddRange(projectGroups.Select(c => new TargetContentItemPermissionViewModel
                    {
                        BusinessUnitId = c.Id,
                        Checked        = true
                    }));
                }
            }
            else
            {
                editContentPermissionViewModel = this.Convert(model, part.ContentItem.Id, ContentItemPermissionAccessTypes.SharedForView);
            }

            this.contentOwnershipHelper.Update(editContentPermissionViewModel, new List <ContentItem>()
            {
                part.ContentItem
            });

            return(null);
        }
コード例 #2
0
        protected EditContentPermissionViewModel Convert(ProjectPermissionEditPostViewModel inputModel, int contentId, byte accessType)
        {
            EditContentPermissionViewModel model = new EditContentPermissionViewModel
            {
                ContentIds          = new[] { contentId },
                AccessType          = accessType,
                RemoveOldPermission = false,
            };

            bool isOperatorOrCustomer = this.crmContentOwnershipService.IsCurrentUserOperator() || this.crmContentOwnershipService.IsCurrentUserCustomer();
            int  currentUserId        = this.orchardServices.WorkContext.CurrentUser.Id;

            if (inputModel.Users != null)
            {
                foreach (var user in inputModel.Users)
                {
                    model.Targets.Add(new TargetContentItemPermissionViewModel {
                        UserId = user, Checked = true
                    });
                }
            }

            if (inputModel.Customers != null)
            {
                foreach (var user in inputModel.Customers)
                {
                    model.Targets.Add(new TargetContentItemPermissionViewModel {
                        UserId = user, Checked = true
                    });
                }
            }

            if (inputModel.BusinessUnits != null)
            {
                foreach (var item in inputModel.BusinessUnits)
                {
                    model.Targets.Add(new TargetContentItemPermissionViewModel {
                        BusinessUnitId = item, Checked = true
                    });
                }
            }

            if (inputModel.Teams != null)
            {
                foreach (var item in inputModel.Teams)
                {
                    model.Targets.Add(new TargetContentItemPermissionViewModel {
                        TeamId = item, Checked = true
                    });
                }
            }

            // if current user is an operator or customer, then he/she will have Owner/edit access,so he/she must be removed from the list
            // in order to prevent rewriting his privelege on the item
            if (isOperatorOrCustomer)
            {
                var toDelete = model.Targets.Where(c => c.UserId != null && c.UserId == currentUserId);
                foreach (var item in toDelete)
                {
                    model.Targets.Remove(item);
                }
            }

            return(model);
        }