Я использую объект portalsitemapprovider для создания моего контроллера навигационного сервера.PortalSiteMapprovider Code Access Требования безопасности
Я назначил доступ к объектной модели sharepoint и права олицетворения в элементах управления CAS. Однако, несмотря на это, я не могу восстановить дочерние узлы корневого узла Sitemap, они просто возвращают ошибку.
Если я изменил веб-приложение для запуска под полным доверием, я могу восстановить дочерние узлы.
Таким образом, мой вопрос заключается в том, какие политики CAS требуются для полного доступа к данным в объекте поставщика Sitemap, и почему я могу получить доступ к корневому узлу, но не к его детям в настоящее время?
Пример кода:
PortalSiteMapProvider sp = PortalSiteMapProvider.WebSiteMapProvider;
PortalSiteMapNode rootNode = (PortalSiteMapNode)siteProvider.RootNode;
foreach (SiteMapNode node in rootNode.ChildNodes)
{
//this loop returns 1 item with title "Error" with no exception thrown.
}
Моя Ассамблея имеет следующие CAS запросы:
[assembly: SharePointermission(SecurityAction.RequestMinimum, ObjectModel=true, Impersonate=true)]
С approprite записей IPermission в развертывании манифеста. После развертывания веб-приложения web.config обновляется до уровня доверия WSS_Custom, как и ожидалось.
Любые идеи?
Thanks
Не знаете, как увидеть разрешения CAS для класса в отражателе. Я использую WSPBuilder, и он создает пользовательский CAS, но он не работает! :( – Eriedor
Перейдите к классу и посмотрите на атрибуты, украшающие его (должно быть рядом с верхней строкой). –
Хорошо, я посмотрел, и portalsitemapnode имеет ссылку на запрос asphostingpermission.minimal (покрывается wss_minimal) и потребность в ссылке для sharepoint object (закрыто моим обычным cas). Что странно, если уровни CAS не выполняются, не следует ли сборку просто не загружать? (например, если я изменю уровень доверия веб-приложений до wss_medium, сборка не загрузится) Почему он загружает сборку в порядке, но не выполняет вызов без исключения безопасности, просто генерирует «ошибку». – Eriedor