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);
        }
Esempio n. 2
0
        public static bool ModifyPermission(PermissionSet permissionSet, PermissionSecurityPrincipal permissionSecurityPrincipal, MemberRights memberRights)
        {
            bool result = false;

            if (permissionSecurityPrincipal.Type == PermissionSecurityPrincipal.SecurityPrincipalType.SpecialPrincipal && permissionSecurityPrincipal.SpecialType == PermissionSecurityPrincipal.SpecialPrincipalType.Default)
            {
                GroupMailboxPermissionHandler.Tracer.TraceDebug <PermissionSecurityPrincipal.SpecialPrincipalType, MemberRights>(0L, "Modifying permissions for permissionSecurityPrincipal {0} with rights {1}", PermissionSecurityPrincipal.SpecialPrincipalType.Default, memberRights);
                Permission permission = permissionSet.DefaultPermission;
                if (permission != null && permission.MemberRights != memberRights)
                {
                    permissionSet.SetDefaultPermission(memberRights);
                    result = true;
                }
            }
            else
            {
                GroupMailboxPermissionHandler.Tracer.TraceDebug <string, MemberRights>(0L, "Modifying permissions for permissionSecurityPrincipal {0} with rights {1}", (permissionSecurityPrincipal.Type == PermissionSecurityPrincipal.SecurityPrincipalType.ExternalUserPrincipal) ? permissionSecurityPrincipal.ExternalUser.ExternalId : string.Empty, memberRights);
                Permission permission = permissionSet.GetEntry(permissionSecurityPrincipal);
                if (permission == null && memberRights != MemberRights.None)
                {
                    permission = permissionSet.AddEntry(permissionSecurityPrincipal, PermissionLevel.None);
                    permission.MemberRights = memberRights;
                    result = true;
                }
                else if (permission != null && memberRights == MemberRights.None)
                {
                    permissionSet.RemoveEntry(permissionSecurityPrincipal);
                    result = true;
                }
                else if (permission != null && permission.MemberRights != memberRights)
                {
                    permission.MemberRights = memberRights;
                    result = true;
                }
            }
            return(result);
        }