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); }
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); }