Я пишу пользовательский атрибут авторизации для одного требования.
В соответствии с требованием мне нужно передать все разрешенные роли для этого конкретного метода действия, как показано ниже.
[MyAuthorize("Admin,Reviewer")]
public ActionResult GetFXSelldownSummaryData()
{
var model = (new FXSelldownSummaryBLL()).GetFXSelldownSummaryData();
return View(model);
}
Когдапользователь входит в систему, роль пользователя, вошедшего в систему, следует сравнивать со всеми разрешенными ролями (в приведенном выше коде все разрешенные роли - Admin
и Reviewer
).Если роль совпадает, пользователь может видеть представление, в противном случае страницу следует перейти к странице Авторизованный Un.
Я написал пользовательский атрибут, как показано ниже, все работает нормально, но я получаю неавторизованный доступСтраница для всех запросов.
Может кто-нибудь, пожалуйста, помогите определить и решить проблему!
namespace MyRequirement
{
public class MyAuthorizeAttribute : AuthorizeAttribute
{
readonly string allowedRoles;
public MyAuthorizeAttribute(string allowedRoles)
{
this.allowedRoles = allowedRoles;
}
public System.Collections.Generic.List<string> AllowedRoles
{
get
{
return this.allowedRoles.Split(',').ToList();
}
}
private bool AuthorizeRole(AuthorizationContext filterContext)
{
var context = filterContext.RequestContext.HttpContext;
PnLUserDetails userDetails = System.Web.HttpContext.Current.Session["PnLUserDetails"] as PnLUserDetails;
string loggedInUserRole = userDetails.Role;
if (AllowedRoles.Contains(loggedInUserRole))
return true;
return false;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext == null)
throw new ArgumentException("filterContext");
bool authStatus = AuthorizeRole(filterContext);
if(!authStatus)
{
filterContext.Result = new HttpUnauthorizedResult();
return;
}
}
}
}