Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }