Написание пользовательского атрибута [Authorize]

Я читаю эту документацию, пытаясь найти, где я должен заменить строку подключения или что-то связанное с управлением базой данных, чтобы переопределить в моем CustomAuthorize атрибут, чтобы получить следующее поведение:

public override bool AuthorizeCore(HttpContextBase httpContext)
{
    //Check if the actual user is in the roles provided
    if(user.HasRole(Roles))
    {
        true;
    }
    else
    {
        false;
    }
}

Что я не знаю:

  • Как класс знает, где и какой мой Users а также Roles стол для работы?

1 ответ

Сначала аутентифицируйте пользователя и создайте аутентифицированный cookie для его сеанса, что-то вроде этого:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, model.Email, DateTime.Now, DateTime.Now.AddDays(1), false, model.Email);

string hashedTicket = FormsAuthentication.Encrypt(ticket);

HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashedTicket);

HttpContext.Response.Cookies.Add(cookie);

Следующий шаг, когда приложение пытается аутентифицироваться:

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
    var authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];

    if (authCookie != null)
    {
        var authTicket = FormsAuthentication.Decrypt(authCookie.Value);
        var user = this.UserService.GetUserByEmail(authTicket.Name);

        var identity = new GenericIdentity(authTicket.Name, "Forms");

        // Get the stored user roles
        HttpContext.Current.User = new GenericPrincipal(identity, user.Roles);
    }
}

Тогда вы сможете использовать:

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
    if (httpContext.User.IsInRole("admin"))
    {

    }
}
Другие вопросы по тегам