Права доступа для выполнения SPUser
От: Dosent Россия  
Дата: 16.07.12 11:45
Оценка:
Добрый день.
Подскажите куда копать со следующей проблемой.
Ниже код который выдергивает пользователей из определенной группы с сервера sharepinta. Но возникает проблема с обычными пользователями у них вылетает ошибка: нет доступа
под админскими правами нет проблем.
Я так понимаю нужно сделать олицетворение или я неправ? может ткнете носом в нормальный пример.
          site = new SPSite(cHTTP_SHAREPOINT_SERVER);
            SPWeb web;
            web = site.OpenWeb();
            using (SPWeb oWebsite = web)
            {
                SPGroupCollection collGroups = oWebsite.Groups;
                foreach (SPGroup oGroup in collGroups)
                {
                    if (oGroup.Name == aNameGroup)
                    {
                        foreach (SPUser oUser in oGroup.Users)
                        {
                            result.Add(new ListItem(oUser.Name,oUser.Email));
                        }
                    }
                }
            }
Сердце мудрого делает язык его мудрым и умножает знание в устах его. ПРИТСОЛО(16,23)
3433606
Re: Права доступа для выполнения SPUser
От: Dosent Россия  
Дата: 16.07.12 12:12
Оценка:
Здравствуйте, Dosent, Вы писали:

D>Добрый день.

D>Подскажите куда копать со следующей проблемой.
D>Ниже код который выдергивает пользователей из определенной группы с сервера sharepinta. Но возникает проблема с обычными пользователями у них вылетает ошибка: нет доступа
D>под админскими правами нет проблем.
D>Я так понимаю нужно сделать олицетворение или я неправ? может ткнете носом в нормальный пример.
D>
D>          site = new SPSite(cHTTP_SHAREPOINT_SERVER);
D>            SPWeb web;
D>            web = site.OpenWeb();
D>            using (SPWeb oWebsite = web)
D>            {
D>                SPGroupCollection collGroups = oWebsite.Groups;
D>                foreach (SPGroup oGroup in collGroups)
D>                {
D>                    if (oGroup.Name == aNameGroup)
D>                    {
D>                        foreach (SPUser oUser in oGroup.Users)
D>                        {
D>                            result.Add(new ListItem(oUser.Name,oUser.Email));
D>                        }
D>                    }
D>                }
D>            }
D>

все решил:
решение от системной записи
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                SPSite site;
                site = new SPSite(cHTTP_SHAREPOINT_SERVER);
                SPWeb web;
                web = site.OpenWeb();
                using (SPWeb oWebsite = web)
                {
                    SPGroupCollection collGroups = oWebsite.Groups;
                    foreach (SPGroup oGroup in collGroups)
                    {
                        if (oGroup.Name == aNameGroup)
                        {
                            foreach (SPUser oUser in oGroup.Users)
                            {
                                result.Add(new ListItem(oUser.Name, oUser.Email));
                            }
                        }
                    }
                }
            });
Сердце мудрого делает язык его мудрым и умножает знание в устах его. ПРИТСОЛО(16,23)
3433606
Re[2]: Права доступа для выполнения SPUser
От: np9mi7 Россия  
Дата: 23.07.12 21:38
Оценка:
Здравствуйте, Dosent, Вы писали:

D>решение от системной записи

D>
D>            SPSecurity.RunWithElevatedPrivileges(delegate()
D>            {
D>                SPSite site;
D>                site = new SPSite(cHTTP_SHAREPOINT_SERVER);
D>                SPWeb web;
D>                web = site.OpenWeb();
D>                using (SPWeb oWebsite = web)
D>                {
D>                    SPGroupCollection collGroups = oWebsite.Groups;
D>                    foreach (SPGroup oGroup in collGroups)
D>                    {
D>                        if (oGroup.Name == aNameGroup)
D>                        {
D>                            foreach (SPUser oUser in oGroup.Users)
D>                            {
D>                                result.Add(new ListItem(oUser.Name, oUser.Email));
D>                            }
D>                        }
D>                    }
D>                }
D>            });
D>


Можно ещё вот так

using (SPSite site = new SPSite(siteID, SPUserToken.SystemAccount))
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
"В любое мгновение принятия решения, лучшее, что вы можете сделать, это принять правильное решение; следующим лучшим вариантом будет принять неправильное решение, худший вариант – не принимать решения совсем" (c) Теодор Рузвельт.
Re[2]: Права доступа для выполнения SPUser
От: Farsight СССР  
Дата: 07.08.12 20:04
Оценка:
Здравствуйте, Dosent, Вы писали:

D>
D>            SPSecurity.RunWithElevatedPrivileges(delegate()
D>            {
D>                SPSite site;
D>                site = new SPSite(cHTTP_SHAREPOINT_SERVER);
D>                SPWeb web;
D>                web = site.OpenWeb();
D>                using (SPWeb oWebsite = web)
D>                {
D>                    SPGroupCollection collGroups = oWebsite.Groups;
D>                    foreach (SPGroup oGroup in collGroups)
D>                    {
D>                        if (oGroup.Name == aNameGroup)
D>                        {
D>                            foreach (SPUser oUser in oGroup.Users)
D>                            {
D>                                result.Add(new ListItem(oUser.Name, oUser.Email));
D>                            }
D>                        }
D>                    }
D>                }
D>            });
D>


Данный код будет выполнен от имени учетной записи пула приложения, а не от системной. Если пул крутится под системной учетной записью, то таки да, будут привилегии системной учетной записи. Но в идеале системная учетная запись и учетная запись пула приложений должны быть разными.

PS: Зачем так?
web = site.OpenWeb();
using (SPWeb oWebsite = web){}


PPS: SPSite тоже нужно диспозить.
</farsight>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.