azadpeyma.parham Ответов: 2

Как удалить профиль пользователя SharePoint программно-при использовании FBA?


Привет ребята,

Я пытаюсь разработать веб-часть, с помощью которой "администраторы" могут добавлять, редактировать и удалять пользователей как в SharePoint, так и в SQL-членстве.
Эта веб-часть должна работать на портале FBA.
Здесь у меня возникла проблема с удалением профилей пользователей SharePoint. Мой код таков, как показано ниже. Но этот код работает только в порталах аутентификации Windows, а не в порталах аутентификации на основе форм.
Я получаю сообщение об ошибке при входе на портал с пользователем SQL-членства.
Вот сообщение об ошибке: "Доступ запрещен: только администратор может удалить профиль пользователя". RunWithElevatedPrivileges!

Кажется, что SPSecurity.RunWithElevatedPrivileges не работает в SPFarm?
Я не знаю, как мне избавиться от этой ошибки.:(

Кто-нибудь может мне помочь?

Овации,
SPSecurity.RunWithElevatedPrivileges(
           delegate
           {
                   try
                   {
                       //- Step 1: Delete user from membership
                       Utility.DeleteMembershipUser(fullUserName);
                   }
                   catch (Exception ex)
                   {
                       HandleExceptionAsMinor(ex, lblErrorMessage, "deleting the user from Membership Provider", OverrideErrorMessage);
                   }

                   bool catchAccessDenied = SPSecurity.CatchAccessDeniedException;
                   SPSecurity.CatchAccessDeniedException = false;
                   try
                   {
                       //- Step 2: Delete User Profile
                       SPUtility.ValidateFormDigest();
                       SPContext.Current.Site.AllowUnsafeUpdates = true;
                       var sc = ServerContext.GetContext(site);
                       var userProfileManager = new UserProfileManager(sc);
                       if (userProfileManager.UserExists(fullUserName))
                       {
                           UserProfile userProfile = userProfileManager.GetUserProfile(fullUserName);
                           if (userProfile.PersonalSite != null)
                               userProfile.PersonalSite.Delete();
                           
          /////***** HERE I GET THE ERROR*****/////////////                           
userProfileManager.RemoveUserProfile(fullUserName);
                           /////***** HERE I GET THE ERROR ******/////////////
                       }
                   }
                   catch (Exception ex)
                   {
                       HandleExceptionAsMinor(ex, lblErrorMessage, "deleting the user from SharePoint Profile", OverrideErrorMessage);
                   }
                   finally
                   {
                       SPSecurity.CatchAccessDeniedException = catchAccessDenied;
                       SPContext.Current.Site.AllowUnsafeUpdates = false;
                   }
                   try
                   {
                       //- Step 3: Delete User from SharePoint Site
                       site.RootWeb.SiteUsers.Remove(fullUserName);
                   }
                   catch (Exception ex)
                   {
                       HandleExceptionAsMinor(ex, lblErrorMessage, "deleting the user from Site Groups", OverrideErrorMessage);
                   }
               }
           });
       string connectionString = ConfigurationManager.ConnectionStrings[ConnStringName].ConnectionString;

       Grid.DataBind();
   }
   catch (Exception ex)
   {
       HandleExceptionAsMinor(ex, lblErrorMessage, "deleting the user", OverrideErrorMessage);
   }

Sandeep Mewara

Используйте предварительные теги для форматирования части кода. Это делает вопрос читабельным.

2 Ответов

Рейтинг:
2

Veeralaxminarayana Induvasi

Умудритесь исправить код с помощью

  SPSecurity.RunWithElevatedPrivileges(delegate()
           {
string AccountName="yourAccountNamehere";
                using (SPSite site = new SPSite(context.GetUrl()))
                {
                    SPServiceContext current = SPServiceContext.GetContext(site);
                    UserProfileManager upm = new UserProfileManager(current);

                    if (upm.UserExists(AccountName))
                    {

                        ProfileBase profile = upm.GetUserProfile(AccountName);
                        upm.RemoveProfile(profile);                    
                       
                    }
                    else
                    {
                        return;
                    }
                }
           });


Richard Deeming

Этот вопрос был задан, на него ответили и решили ШЕСТЬ ЛЕТ НАЗАД.

Рейтинг:
16

Not Active

"Чтобы удалить профиль пользователя для другого пользователя, у вас должен быть PortalRight.Разрешение ManageUserProfile."
http://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.userprofilemanager_methods.aspx[^]

Вы уверены, что вам было предоставлено соответствующее право?

При использовании RunWithElevatedPrivileges используется учетная запись, настроенная для пула приложений веб-приложения, в котором выполняется код. Если вы запускаете это от центрального администратора, то это будет настройка учетной записи для этого.


[no name]

Именно проблема заключается в том, что моя учетная запись не имеет достаточного доступа к Центральному администратору.
В принципе, мне нужно разработать веб-часть, с помощью которой "мои администраторы приложений" смогут удалять пользователей и, следовательно, профили. Из-за использования FBA эти пользователи не будут иметь никакого доступа к Центральному администратору, поэтому они не смогут удалить профили пользователей SharePoint. Однако эта веб-часть работает так, как и ожидалось, когда я использую порталы аутентификации Windows (при условии, что пользователь имеет достаточный доступ...).
Мой вопрос заключается в том, как я могу обойти этот сценарий и позволить "администратору приложения", который потенциально не является администратором семейства сайтов или кем-то еще, удалить пользователей из своего сайта. Это удаление должно быть сделано полностью везде. Вот почему я ищу решение для удаления профиля пользователей SharePoint. :-?

Ваш намек был таким фантастическим и попал в точку. :) Молодец, мужик!

Ура дружище,
Парэма