internal void AddOrChangePermission(PermissionSecurityPrincipal principal, PermissionLevel permissionLevel, FreeBusyAccess?freeBusyAccess) { this.CheckDisposed(); Util.ThrowOnNullArgument(principal, "principal"); Permission permission; if (freeBusyAccess == null) { permission = new Permission(principal, MemberRights.None); } else { permission = new CalendarFolderPermission(principal, MemberRights.None) { FreeBusyAccess = freeBusyAccess.Value }; } permission.PermissionLevel = permissionLevel; if (freeBusyAccess != null) { permission.MemberRights |= MemberRights.Visible; } if (this.permissionsToRemove.Remove(principal)) { ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal, PermissionSecurityPrincipal>((long)this.GetHashCode(), "{0}: Removed {1} from permissionsToRemove list.", this.mailboxSession.MailboxOwner, principal); } if (!this.permissionsToAddOrChange.ContainsKey(principal)) { this.permissionsToAddOrChange.Add(principal, permission.MemberRights); ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal, PermissionSecurityPrincipal, MemberRights>((long)this.GetHashCode(), "{0}: Added {1} to permissionsToAddOrChange list: MemberRights = {2}.", this.mailboxSession.MailboxOwner, principal, permission.MemberRights); return; } this.permissionsToAddOrChange[principal] = permission.MemberRights; ExTraceGlobals.SharingTracer.TraceDebug <IExchangePrincipal, PermissionSecurityPrincipal, MemberRights>((long)this.GetHashCode(), "{0}: Changed {1} in permissionsToAddOrChange list: MemberRights = {2}.", this.mailboxSession.MailboxOwner, principal, permission.MemberRights); }
private DetailLevelEnumType?GetFreeBusyAccessLevel(PermissionSecurityPrincipal targetPrincipal) { DetailLevelEnumType? result = null; CalendarFolderPermission calendarFolderPermission = null; using (CalendarFolder calendarFolder = (CalendarFolder)this.GetCalendarFolder()) { CalendarFolderPermissionSet permissionSet = calendarFolder.GetPermissionSet(); calendarFolderPermission = permissionSet.GetEntry(targetPrincipal); if (calendarFolderPermission != null) { if ((calendarFolderPermission.MemberRights & MemberRights.ReadAny) == MemberRights.ReadAny) { result = new DetailLevelEnumType?(DetailLevelEnumType.FullDetails); } else if (calendarFolderPermission.FreeBusyAccess == FreeBusyAccess.Details) { result = new DetailLevelEnumType?(DetailLevelEnumType.LimitedDetails); } else if (calendarFolderPermission.FreeBusyAccess == FreeBusyAccess.Basic) { result = new DetailLevelEnumType?(DetailLevelEnumType.AvailabilityOnly); } } } if (result == null) { ExTraceGlobals.SharingTracer.TraceDebug <SmtpAddress, string>((long)this.GetHashCode(), "ReachUser ={0}, Not authroized to view published calendar. Permissions:{1}", targetPrincipal.ExternalUser.OriginalSmtpAddress, (calendarFolderPermission == null) ? "No permission" : calendarFolderPermission.MemberRights.ToString()); } return(result); }