Включить роли без (или с фиктивным) поставщика ролей
Я следую за этой статьей, в которой описано, как назначать роли пользователям, когда они входят в систему с помощью аутентификации по формам:
public void Application_AuthenticateRequest( Object src , EventArgs e )
{
if (!(HttpContext.Current.User == null))
{
if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
{
System.Web.Security.FormsIdentity id;
id = (System.Web.Security.FormsIdentity)HttpContext.Current.User.Identity;
String[] myRoles = new String[2];
myRoles[0] = "Manager";
myRoles[1] = "Admin";
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
}
}
}
Я поместил логику ролей в обработчик событий, поэтому мне в принципе не нужен поставщик ролей. Тем не менее, чтобы запустить это, кажется, что я должен включить поставщика ролей в web.config
, К сожалению, если бы я просто поставил:
<roleManager enabled="true"/>
это приводит к ошибкам во время выполнения, связанным с неудачным подключением к серверу SQL, как если бы я выбрал AspNetSqlRoleProvider
как поставщик ролей.
Что я должен сделать, чтобы роли работали таким образом? Как я могу выбрать не использовать поставщика ролей или как реализовать фиктивного (если это имеет смысл)?
1 ответ
Вам не нужно включать roleManager
в web.config - в конце концов, люди использовали роли с.NET 1.x до появления roleManager.
Одна вещь, которая roleManager
сделает для вас, что вы не сделали в вашем коде установлено Thread.CurrentPrincipal
в HttpContext.Current.User
, Если вы полагаетесь на это (например, используя PrincipalPermissionAttribute
), то вам нужно добавить это:
Thread.CurrentPrincipal = HttpContext.Current.User;
В противном случае, я ожидаю, что это сработает: какие симптомы вы видите, что заставляет вас думать, что это не работает?
Что касается реализации манекена RoleProvider
это достаточно просто: например, посмотрите эту статью MSDN.
Вам нужно только реализовать GetRolesForUser
а также IsInRole
методы; другие методы могут просто бросить NotSupportedException
,