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);
        }
Example #2
0
        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();
        }