Написание пользовательского атрибута [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"))
{
}
}