Основываясь на приведенном выше фрагменте кода, вы используете проверку подлинности с помощью MVC.
Когда используется проверка подлинности с помощью форм, при возникновении необходимости проверки подлинности платформа ASP.NET проверяет текущий объект типа IPrinciple,Идентификатор пользователя и роль, содержащиеся в этом объекте типа IPrinciple, будут определять, разрешен ли пользователю доступ.
До сих пор вы не написали код для передачи сведений о роли пользователя в этом основном объекте.Для этого вам нужно переопределить метод с именем FormsAuthentication_OnAuthenticate в global.asax.Этот метод вызывается каждый раз, когда ASP.NET framework пытается проверить аутентификацию и авторизацию в соответствии с текущим принципом.
Теперь вам нужно переопределить этот метод.Проверьте билет проверки подлинности (поскольку пользователь уже был проверен и билет был создан), а затем предоставьте эту информацию о пользователе / роли в объекте типа IPrinciple.Для простоты вы просто создадите объект GenericPriciple и зададите в нем специфичные для пользователя детали следующим образом:
protected void FormsAuthentication_OnAuthenticate(Object sender, FormsAuthenticationEventArgs e)
{
if (FormsAuthentication.CookiesSupported == true)
{
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
try
{
//let us take out the username now
string username = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value).Name;
string roles = string.Empty;
using (userDbEntities entities = new userDbEntities())
{
User user = entities.Users.SingleOrDefault(u => u.username == username);
roles = user.Roles;
}
//let us extract the roles from our own custom cookie
//Let us set the Pricipal with our user specific details
e.User = new System.Security.Principal.GenericPrincipal(
new System.Security.Principal.GenericIdentity(username, "Forms"), roles.Split(';'));
}
catch (Exception)
{
//somehting went wrong
}
}
}
}
Примечание : в MVC 4 и более поздних версиях это событие будетне работа.Чтобы аутентификация пользовательских форм работала в MVC 4 и более поздних версиях, нам нужно поместить этот код в событие Application_PostAuthenticateRequest в файле Global.asax.
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
if (FormsAuthentication.CookiesSupported == true)
{
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
try
{
//let us take out the username now
string username = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value).Name;
string roles = string.Empty;
using (userDbEntities entities = new userDbEntities())
{
User user = entities.Users.SingleOrDefault(u => u.username == username);
roles = user.Roles;
}
//let us extract the roles from our own custom cookie
//Let us set the Pricipal with our user specific details
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(
new System.Security.Principal.GenericIdentity(username, "Forms"), roles.Split(';'));
}
catch (Exception)
{
//somehting went wrong
}
}
}
}
Ссылка: https://www.codeproject.com/Articles/578374/AplusBeginner-splusTutorialplusonplusCustomplusF