using System.ComponentModel.DataAnnotations; using System.Runtime.Serialization; using Umbraco.Cms.Core.Models.Membership; using Umbraco.Extensions; namespace Umbraco.Cms.Core.Models.ContentEditing; [DataContract(Name = "userGroup", Namespace = "")] public class UserGroupSave : EntityBasic, IValidatableObject { /// /// The action to perform when saving this user group /// /// /// If either of the Publish actions are specified an exception will be thrown. /// [DataMember(Name = "action", IsRequired = true)] [Required] public ContentSaveAction Action { get; set; } [DataMember(Name = "alias", IsRequired = true)] [Required] public override string Alias { get; set; } = string.Empty; [DataMember(Name = "sections")] public IEnumerable? Sections { get; set; } [DataMember(Name = "users")] public IEnumerable? Users { get; set; } [DataMember(Name = "startContentId")] public int? StartContentId { get; set; } [DataMember(Name = "startMediaId")] public int? StartMediaId { get; set; } [DataMember(Name = "hasAccessToAllLanguages")] public bool HasAccessToAllLanguages { get; set; } /// /// The list of letters (permission codes) to assign as the default for the user group /// [DataMember(Name = "defaultPermissions")] public IEnumerable? DefaultPermissions { get; set; } /// /// The assigned permissions for content /// /// /// The key is the content id and the list is the list of letters (permission codes) to assign /// [DataMember(Name = "assignedPermissions")] public IDictionary>? AssignedPermissions { get; set; } /// /// The ids of allowed languages /// [DataMember(Name = "allowedLanguages")] public IEnumerable? AllowedLanguages { get; set; } /// /// The real persisted user group /// [IgnoreDataMember] public IUserGroup? PersistedUserGroup { get; set; } public IEnumerable Validate(ValidationContext validationContext) { if (DefaultPermissions?.Any(x => x.IsNullOrWhiteSpace()) ?? false) { yield return new ValidationResult("A permission value cannot be null or empty", new[] { "Permissions" }); } if (AssignedPermissions is not null) { foreach (KeyValuePair> assignedPermission in AssignedPermissions) { foreach (var permission in assignedPermission.Value) { if (permission.IsNullOrWhiteSpace()) { yield return new ValidationResult( "A permission value cannot be null or empty", new[] { "AssignedPermissions" }); } } } } } }