예제 #1
0
 private bool PreMembershipUpdate()
 {
     this.recipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(false, ConsistencyMode.IgnoreInvalid, this.mailboxSession.GetADSessionSettings(), 106, "PreMembershipUpdate", "f:\\15.00.1497\\sources\\dev\\UnifiedGroups\\src\\UnifiedGroups\\GroupMailboxAccessLayer\\Commands\\GroupMailboxMembershipUpdater.cs");
     this.groupObject      = this.recipientSession.FindADUserByObjectId(this.mailboxSession.MailboxOwner.ObjectId);
     if (this.groupObject == null)
     {
         GroupMailboxMembershipUpdater.Tracer.TraceError <string>((long)this.GetHashCode(), "PreMembershipUpdate: Unable to locate the AD object for the group mailbox {0} successfully", this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString());
         return(false);
     }
     if (this.groupObject.RecipientTypeDetails != RecipientTypeDetails.GroupMailbox)
     {
         GroupMailboxMembershipUpdater.Tracer.TraceError <string>((long)this.GetHashCode(), "PreMembershipUpdate: The mailbox {0} is not of type group mailbox", this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString());
         return(false);
     }
     GroupMailboxMembershipUpdater.Tracer.TraceDebug <string>((long)this.GetHashCode(), "PreMembershipUpdate: Located the AD object of the group mailbox {0} successfully", this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString());
     this.previousExternalMemberUser = new ExternalUser(this.mailboxSession.DisplayName, this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString(), SmtpAddress.Parse(this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString()), GroupMailboxMembershipUpdater.EarlierGroupMailboxMemberAccessSecurityIdentifier);
     this.currentExternalMemberUser  = ExternalUser.CreateExternalUserForGroupMailbox(this.mailboxSession.DisplayName, "Member@local", this.mailboxSession.MailboxGuid, SecurityIdentity.GroupMailboxMemberType.Member);
     this.currentExternalOwnerUser   = ExternalUser.CreateExternalUserForGroupMailbox(this.mailboxSession.DisplayName, "Owner@local", this.mailboxSession.MailboxGuid, SecurityIdentity.GroupMailboxMemberType.Owner);
     using (ExternalUserCollection externalUsers = this.mailboxSession.GetExternalUsers())
     {
         if (!this.AddToExternalUserCollection(externalUsers, this.previousExternalMemberUser) || !this.AddToExternalUserCollection(externalUsers, this.currentExternalMemberUser) || !this.AddToExternalUserCollection(externalUsers, this.currentExternalOwnerUser))
         {
             GroupMailboxMembershipUpdater.Tracer.TraceError <string>((long)this.GetHashCode(), "PreMembershipUpdate: Unable to update external user collection to the group mailbox {0} successfully", this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString());
             return(false);
         }
         GroupMailboxMembershipUpdater.Tracer.TraceDebug <string>((long)this.GetHashCode(), "PreMembershipUpdate: Updated external user collection of the group mailbox {0} successfully", this.mailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString());
     }
     return(true);
 }
        private void SetFolderPermissions()
        {
            ExternalUser externalUser  = ExternalUser.CreateExternalUserForGroupMailbox(this.MailboxPrincipal.MailboxInfo.DisplayName, "Member@local", this.MailboxPrincipal.MailboxInfo.MailboxGuid, SecurityIdentity.GroupMailboxMemberType.Member);
            ExternalUser externalUser2 = ExternalUser.CreateExternalUserForGroupMailbox(this.MailboxPrincipal.MailboxInfo.DisplayName, "Owner@local", this.MailboxPrincipal.MailboxInfo.MailboxGuid, SecurityIdentity.GroupMailboxMemberType.Owner);

            using (ExternalUserCollection externalUsers = this.mailboxSession.GetExternalUsers())
            {
                if (!externalUsers.Contains(externalUser))
                {
                    externalUsers.Add(externalUser);
                }
                if (!externalUsers.Contains(externalUser2))
                {
                    externalUsers.Add(externalUser2);
                }
                externalUsers.Save();
                if (!externalUsers.Contains(externalUser))
                {
                    throw new GroupMailboxFailedToAddExternalUserException(Strings.ErrorUnableToAddExternalUser(externalUser.Name));
                }
                if (!externalUsers.Contains(externalUser2))
                {
                    throw new GroupMailboxFailedToAddExternalUserException(Strings.ErrorUnableToAddExternalUser(externalUser2.Name));
                }
                this.TraceDebug("Added external member user {0} to external user collection", new object[]
                {
                    externalUser.Name
                });
                this.TraceDebug("Added external owner user {0} to external user collection", new object[]
                {
                    externalUser2.Name
                });
            }
            PermissionSecurityPrincipal userSecurityPrincipal  = new PermissionSecurityPrincipal(externalUser);
            PermissionSecurityPrincipal userSecurityPrincipal2 = new PermissionSecurityPrincipal(externalUser2);
            int num = 0;
            List <PermissionEntry> list = new List <PermissionEntry>(3);
            var array = new < > f__AnonymousType0 <DefaultFolderType, MemberRights, MemberRights>[]
            {
                new
                {
                    Folder           = DefaultFolderType.MailboxAssociation,
                    OwnerPermission  = GroupMailboxPermissionHandler.MailboxAssociationPermission,
                    MemberPermission = GroupMailboxPermissionHandler.MailboxAssociationPermission
                },
                new
                {
                    Folder           = DefaultFolderType.SearchFolders,
                    OwnerPermission  = (GroupMailboxPermissionHandler.SearchFolderPermission | GroupMailboxPermissionHandler.OwnerSpecificPermission),
                    MemberPermission = GroupMailboxPermissionHandler.SearchFolderPermission
                },
                new
                {
                    Folder           = DefaultFolderType.Calendar,
                    OwnerPermission  = GroupMailboxPermissionHandler.CalendarFolderPermission,
                    MemberPermission = GroupMailboxPermissionHandler.CalendarFolderPermission
                }
            };

            list.Add(new PermissionEntry(userSecurityPrincipal2, GroupMailboxPermissionHandler.ConfigurationFolderPermission));
            int num2;

            GroupMailboxPermissionHandler.AssignMemberRight(this.mailboxSession, list, DefaultFolderType.Configuration, out num2);
            num += num2;
            var array2 = array;

            for (int i = 0; i < array2.Length; i++)
            {
                var <> f__AnonymousType = array2[i];
                list.Clear();
                list.Add(new PermissionEntry(userSecurityPrincipal2, <> f__AnonymousType.OwnerPermission));
                list.Add(new PermissionEntry(userSecurityPrincipal, <> f__AnonymousType.MemberPermission));
                if (!GroupMailboxPermissionHandler.AssignMemberRight(this.mailboxSession, list, <> f__AnonymousType.Folder, out num2))
                {
                    throw new GroupMailboxFailedToConfigureMailboxException(Strings.ErrorUnableToConfigureMailbox(< > f__AnonymousType.Folder.ToString(), this.MailboxPrincipal.MailboxInfo.DisplayName));
                }
                num += num2;
            }
            this.report.FoldersPrivilegedCount = num;
            this.mailboxSession.Mailbox[MailboxSchema.GroupMailboxPermissionsVersion] = GroupMailboxPermissionHandler.GroupMailboxPermissionVersion;
            this.mailboxSession.Mailbox.Save();
            this.mailboxSession.Mailbox.Load();
        }