Я уверен, что это сработает для вас ...
2 шага ... Первое, что вам нужно сделать, это в вашем Global.asax.cs попытаться поставить это
protected void Application_AcquireRequestState(Object sender, EventArgs e)
{
//Context.Handler in this state, we can access Session.
if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)
{
//Is it a session created in this request?
if (Session.IsNewSession)
{
//Am I already authenticated?
if (User.Identity.IsAuthenticated)
{
//if already authenticated, check if it is logon, if not, we just logout,
//else, we can continue the logon and reset the user identity.
string url = Request.Url.ToString();
if (url.IndexOf("Account/LogOn") < 0)
{
FormsAuthentication.SignOut();
Response.Redirect(Request.RawUrl);
}
}
}
else
{
//Am I already authenticated?
if (User.Identity.IsAuthenticated)
{
try
{
/// Here we try to get the current role of the user logged in from the session
SessionUser myRole = CurrentUser.GetRole();
string[] strRole;
switch (myRole)
{
case Role.ADSales:
{
string[] Roles = { "ADSales" };
strRole = Roles;
}
break;
case Role.DeptHead:
{
string[] Roles = { "DeptHead" };
strRole = Roles;
}
break;
case Role.ProductionCrew:
{
string[] Roles = { "ProductionCrew" };
strRole = Roles;
}
break;
case Role.Admin:
{
string[] Roles = { "Admin" };
strRole = Roles;
}
break;
default:
throw new AuthenticationException(ErrorEnum.Impossible);
//break;
}
Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, strRole);
}
catch (Exception)
{
string url = Request.Url.ToString();
if (url.IndexOf("Account/LogOn") < 0)
{
FormsAuthentication.SignOut();
Response.Redirect(Request.RawUrl);
}
}
}
}
}
}
Далее в вашем контроллере добавьте атрибут
[Authorize(Roles = "ProductionCrew,DeptHead,Admin")]
public ActionResult Letter()
{
Return View();
}
Обратите внимание, что я не включил ADSales в роли, это означает, что пользователь, имеющий указанную роль, не может получить доступ к странице Letter.
Надеюсь, это поможет.Пожалуйста, проголосуйте, если это помогло вам, и не забудьте пометить его как ответ, если это решит вашу проблему.Спасибо!