Проверьте разрешение пользователя на сайт или рабочую область по URL - PullRequest
0 голосов
/ 20 января 2010

С учетом списка рабочих областей:

http://server/managed_path/sitecoll/basic
http://server/managed_path/sitecoll/blank
http://server/managed_path/sitecoll/decision
http://server/managed_path/sitecoll/multipage
http://server/managed_path/sitecoll/social

Как я могу вызвать DoesUserHavePermissions () - или что-то подобное - чтобы узнать, может ли пользователь, вошедший в систему в данный момент, получить доступ к веб-сайту?

Я пишу пользовательский элемент управления для вывода списка рабочих пространств, к которым у них есть доступ, но когда я пытаюсь проверить, я получаю множество ошибок, с которыми я не могу обойти этот код:

foreach (String s in workspaces)
{
    using (SPSite site = new SPSite(s))
    {
        using (SPWeb web = site.OpenWeb(s))
        {
    // web.DoesUserHavePermissions(...)
        }
    }
}

1 Ответ

1 голос
/ 20 января 2010

1) Все URL-адреса в вашем примере находятся в одном семействе сайтов, только с разными веб-сайтами, это означает, что вам не нужно каждый раз открывать SPSite, просто SPWebs

2) При открытии spsite используйте «SystemAccount.Token», как в этом примере: http://blackninjasoftware.com/2009/04/09/how-to-programmatically-impersonate-users-in-sharepoint/

SPSite tempSite = new SPSite(siteStr); 
SPUserToken systoken = tempSite.SystemAccount.UserToken;
using (SPSite site = new SPSite(siteStr, systoken)) {
   //here goes the foreach loop and you iterate through the workspaces
}

Таким образом, вы сможете вызывать метод DoesuserHavePermissions.

3) Имейте в виду, что открытие и закрытие SPWebs во время выполнения ухудшит производительность. Попытайтесь кэшировать результаты вашего кода, если это возможно.

...