Создание ролевого меню ASP.NET с использованием элемента управления картой сайта для механизма аутентификации ADFS
В настоящее время я использую механизм аутентификации ADFS для аутентификации пользователя. В этом случае я устанавливаю режим аутентификации как None вместо аутентификации форм. После успешного входа пользователя в систему объект заявок предоставит данные роли, связанные с пользователем loggedIn, поэтому в этом случае атрибут ролей карты сайта сможет подобрать роль из объекта заявок. Можете ли вы объяснить мне, как будет использоваться свойство securityTrimmingEnabled?
Я использовал пользовательский класс ADFSRoleProvider.cs, который наследует класс RoleProvider и переопределяет метод GetRolesForUser, но метод не вызывается, если я не устанавливаю
<authentication mode="Forms"/>
и это, в свою очередь, также не может взаимодействовать с атрибутом ролей, упомянутым в узле siteMapNode.
Основная проблема заключается в том, что после успешного входа пользователя с использованием механизма аутентификации ADFS, как атрибут роли карты сайта узнает о роли пользователя loggedIn.
Пожалуйста, предоставьте пример кода и помощь по вышеупомянутой проблеме.
1 ответ
Вы уверены, что необходим специальный поставщик ролей? IClaimsPrincipal
объект предоставляет роли для пользователя, он принимает ваши утверждения типа ClaimTypes.Role
,
Возможно, ваша проблема вызвана некоторыми несоответствиями в securityTrimming
реализация. Несколько лет назад я должен был написать свой собственный поставщик карты сайта, чтобы правильно обрабатывать обрезку.
public class XmlSiteMapDefaultProvider : XmlSiteMapProvider
{
public override bool IsAccessibleToUser( HttpContext context, SiteMapNode node )
{
if ( node.Roles.Count > 0 )
{
foreach ( string role in node.Roles )
if ( role == "*" &&
context.User != null &&
context.User.Identity != null &&
context.User.Identity.IsAuthenticated
)
return true;
else
{
if ( context.User != null )
if ( context.User.IsInRole( role ) )
return true;
}
return false;
}
return true;
}
}
Просто зарегистрируйте его в web.config
как ваш SiteMapProvider:
<siteMap enabled ="true" defaultProvider="XmlSiteMapDefaultProvider">
<providers>
<add name="XmlSiteMapDefaultProvider" type="XmlSiteMapDefaultProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true" />
</providers>
</siteMap>