SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Nutzung der Methode SPWeb.ValidateFromDigest

Unbeantwortet Dieser Beitrag hat 7 Antworten

Ohne Rang
41 Beiträge
Ladislav Stupak erstellt 11 Jan. 2011 09:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sehr geehrte Damen und Herren,

ich möchte gerne programmatisch ein "Member" eines "OrganizationProfile" entfernen.

SPSecurity.RunWithElevatedPrivileges reicht für das lesen der Daten aus dem "OrganizationProfile".

Laut der Seite

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsecurity.runwithelevatedprivileges.aspx

muss ich für die Aktualisation der Daten zusätzlich die Methode SPWeb.ValidateFromDigest nutzen.

Wie ich diese Methode nutzen soll, ist da aber nicht beschrieben.

Wissen Sie wie man diese Methode SPWeb.ValidateFromDigest für die aktualisation der Daten einsetzt?

Ich danke Euch sehr schön für Ihre Hilfe.

Ladislav Stupak

 

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 11 Jan. 2011 10:09
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Methode heißt ValidateFormDigest...

Du mußt das nicht zwingend benutzen, hängt immer vom konkreten Fall ab. Siehe dazu
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.validateformdigest.aspx

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
41 Beiträge
Ladislav Stupak Als Antwort am 11 Jan. 2011 10:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

ich danke dir sehr schön für deine Antwort.

Den "Member" will ich mit folgender Methode entfernen:

private void RemoveUserProfile2(long departmentRecordId, long userRecordId)
        {
            using (SPSite site = new SPSite(SiteUrl))
            {
                HttpContext tmpContext = HttpContext.Current;

                try
                {
                    SPSecurity.RunWithElevatedPrivileges(delegate()
                    {
                        using (SPSite elevatedSiteColl = new SPSite(site.ID))
                        {
                            using (SPWeb web = elevatedSiteColl.OpenWeb())
                            {
                                bool validationFormDigestValue = web.ValidateFormDigest();

                                System.Security.PermissionSet ps = new System.Security.PermissionSet(System.Security.Permissions.PermissionState.Unrestricted);
                                ps.Assert();

                                SPServiceContext serviceContext = SPServiceContext.GetContext(elevatedSiteColl);

                                HttpContext.Current = null;

                                OrganizationProfileManager organizationProfileManager = new OrganizationProfileManager(serviceContext);

                                OrganizationProfile organizationProfile = organizationProfileManager.GetOrganizationProfile(departmentRecordId);

                                organizationProfile.RemoveMember(userRecordId);

                            }

                        }
                    });
                }
                catch (Exception ex)
                {     }
                finally
                {
                    HttpContext.Current = tmpContext;
                }
            }
        }

Die Methode ValidateFormDigest() gibt als Ergebnis "true".

bool validationFormDigestValue = web.ValidateFormDigest();

Ich weis nicht wie ich dieses Ergebnis der Methode in dem Code nutzen soll um den "Member" zu entfernen.

Kannst mir damit bitte weiter helfen?

Ich danke dir sehr schön für deine Antwort.

Ladislav

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 11 Jan. 2011 11:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Ladislav Stupak"]Ich weis nicht wie ich dieses Ergebnis der Methode in dem Code nutzen soll um den "Member" zu entfernen.

Kannst mir damit bitte weiter helfen?[/quote]

Nein, tut mir leid. Allerdings bin ich mir ziemlich sicher, daß Du das dafür nicht brauchst, d.h. Du mußt einfach nur schauen, wie Du das Profil entfernen kannst.

Dabei solltest Du aber bedenken, daß der automatische Profilimport das sofort wieder anlegt, wenn der Benutzer nicht auch aus der Quelle entfernt wird.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
41 Beiträge
Ladislav Stupak Als Antwort am 11 Jan. 2011 11:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

ich danke dir sehr schön für deine Antwort.

Ich will nicht den "UserProfil" löschen. Ich will ihm nur aus dem jenigen "OrganizationProfile" entfernen. Diese Information is nicht in dem "UserProfil" bei dem Import beinhaltet. Es ist eine Information von dem "OrganizationProfile" und beinhaltet die Mitglieder der jeweiligen Abteilung.

Die Methode "OrganizationProfile.RemoveMember" scheitert an der Ausnahme System.UnauthorizedAccessException.

Das durchlesen des "OrganizationProfile" ist mit den selben Rechten möglich.

Ich danke dir sehr schön für deine Mühe.

Falls mir jemand anderer damit helfen könnte, wehre ich sehr dankbar.

Ladislav 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 11 Jan. 2011 11:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Ladislav Stupak"]Ich will nicht den "UserProfil" löschen. Ich will ihm nur aus dem jenigen "OrganizationProfile" entfernen[/quote]

Das habe ich wohl mißverstanden.

RunWithElevatedPriviledges sorgt dafür, daß der Code im Kontext des Application Pool ausgeführt wird. Der Account Deines AppPool hat aber offenbar nicht das Recht solche Änderungen zu machen.

Du brauchst also einen Account, der das darf. Den bekommst Du z.B. aus SPWeb.SiteUsers. Damit erzeugst Du dann ein anderes SPSite-Objekt im Kontext dieses Users:
SPSite site = new SPSite("URL", SPUser.UserToken);

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
41 Beiträge
Ladislav Stupak Als Antwort am 11 Jan. 2011 12:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

ich danke dir sehr schön für deine Antwort.

Ich habe die Methode geändert:

private void RemoveUserProfile3(long departmentRecordId, long userRecordId)
        {
           

            using (SPSite site = new SPSite(SiteUrl))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPUser user =web.SiteUsers[@"domain\userWithFullControl"];


                    using (SPSite siteFullControl = new SPSite(SiteUrl, user.UserToken))
                    {
                        SPServiceContext serviceContext = SPServiceContext.GetContext(siteFullControl);

                        HttpContext.Current = null;

                        OrganizationProfileManager organizationProfileManager = new OrganizationProfileManager(serviceContext);

                        OrganizationProfile organizationProfile = organizationProfileManager.GetOrganizationProfile(departmentRecordId);

                        organizationProfile.RemoveMember(userRecordId);

                    }
                }

              
            }
        }

Bekomme aber immer die selbe Fehlermeldung:

System.UnauthorizedAccessException

Falls du noch weitere Ideen dazu hast, währe ich dir sehr dankbar.

Ladislav

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 11 Jan. 2011 12:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Tut mir leid, aber ich habe keine Idee, woran das scheitert. Ich wollte Dir nur ein paar allgemeine Tips geben.

Viele Grüße
Andi
af @ evocom de
Blog