internal override bool InternalProcessPermissions(Folder folder) { MemberRights memberRights = (MemberRights)MailboxFolderAccessRight.CalculateMemberRights(this.AccessRights, folder.ClassName == "IPF.Appointment"); PermissionSet permissionSet = folder.GetPermissionSet(); Permission permission = null; try { if (base.MailboxFolderUserId.UserType == MailboxFolderUserId.MailboxFolderUserType.Default) { if (permissionSet.DefaultPermission != null && permissionSet.DefaultPermission.MemberRights != MemberRights.None) { throw new UserAlreadyExistsInPermissionEntryException(base.MailboxFolderUserId.ToString()); } permissionSet.SetDefaultPermission(memberRights); permission = permissionSet.DefaultPermission; } else if (base.MailboxFolderUserId.UserType == MailboxFolderUserId.MailboxFolderUserType.Anonymous) { if (permissionSet.AnonymousPermission != null && permissionSet.AnonymousPermission.MemberRights != MemberRights.None) { throw new UserAlreadyExistsInPermissionEntryException(base.MailboxFolderUserId.ToString()); } permissionSet.SetAnonymousPermission(memberRights); permission = permissionSet.AnonymousPermission; } else { PermissionSecurityPrincipal securityPrincipal = base.MailboxFolderUserId.ToSecurityPrincipal(); Permission entry = permissionSet.GetEntry(securityPrincipal); if (entry != null) { throw new UserAlreadyExistsInPermissionEntryException(base.MailboxFolderUserId.ToString()); } permission = permissionSet.AddEntry(securityPrincipal, memberRights); } } catch (ArgumentOutOfRangeException exception) { base.WriteError(exception, (ErrorCategory)1003, this.Identity); return(false); } base.WriteObject(MailboxFolderPermission.FromXsoPermission(folder.DisplayName, permission, this.ResolvedObjectId)); return(true); }
protected override void WriteResult(IConfigurable dataObject) { TaskLogger.LogEnter(new object[] { dataObject.Identity, dataObject }); MailboxFolder mailboxFolder = (MailboxFolder)dataObject; MailboxSession mailboxSession = base.InnerMailboxFolderDataProvider.MailboxSession; VersionedId internalFolderIdentity = mailboxFolder.InternalFolderIdentity; int num = 0; using (Folder folder = Folder.Bind(mailboxSession, internalFolderIdentity)) { PermissionSet permissionSet = folder.GetPermissionSet(); if (permissionSet.DefaultPermission != null && (this.mailboxUserId == null || this.mailboxUserId.Equals(permissionSet.DefaultPermission.Principal))) { base.WriteResult(MailboxFolderPermission.FromXsoPermission(folder.DisplayName, permissionSet.DefaultPermission, this.ResolvedObjectId)); num++; } if (permissionSet.AnonymousPermission != null && (this.mailboxUserId == null || this.mailboxUserId.Equals(permissionSet.AnonymousPermission.Principal))) { base.WriteResult(MailboxFolderPermission.FromXsoPermission(folder.DisplayName, permissionSet.AnonymousPermission, this.ResolvedObjectId)); num++; } foreach (Permission permission in permissionSet) { if (this.mailboxUserId == null || this.mailboxUserId.Equals(permission.Principal)) { base.WriteResult(MailboxFolderPermission.FromXsoPermission(folder.DisplayName, permission, this.ResolvedObjectId)); num++; } } } if (this.mailboxUserId != null && num == 0) { throw new UserNotFoundInPermissionEntryException(this.mailboxUserId.ToString()); } TaskLogger.LogExit(); }