Вопрос по asp.net-mvc, asp.net-mvc-3 – Атрибут MVC Custom Authorize для подтверждения запроса

6

У меня есть пользовательский интерфейс с Jquery, который выполняет вызов MVC с использованием Ajax-запроса.

Я хотел бы проверить каждый запрос по userProfile (пользовательский класс, который содержит номер счета, идентификатор и т. Д.).

Может ли кто-нибудь предложить, возможно ли создать пользовательский атрибут авторизации для проверки того, что и запрос, и профиль пользователя совпадают?

Затем я хотел бы сделать что-то вроде ниже:

<code>[AuthorizeUser]
public ActionResult GetMyConsumption(string accountNumber)
{
  .....
  return View();
}
</code>
Да, accountID будет передан. Nil Pun
Если вы хотите проанализировать данные из формы запроса / строки запроса и проверить их, это может быть возможно. У вас будет полный доступ к httpContext в вашем настраиваемом атрибуте авторизации. Вы должны были бы предположить, что переменная "accountNumber" должен существовать в форме, если POST или QueryString, если GET. Привязка параметров (сопоставление данных в запросе с параметрами в вашем действии) будет происходить вокруг метода OnActionExecuting, который является пост-авторизацией. Nick Bork
Проверять, выписыватьсяstackoverflow.com/questions/6860686/… (AuthorizeCore против OnAuthorize), и вот кто-то, кто просматривает некоторые данные запроса (бюджет) для некоторых данных, чтобы определить, авторизован ли пользователь или нет:stackoverflow.com/questions/5989100/… Nick Bork

Ваш Ответ

1   ответ
17

public class AuthorizeUserAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (!isAuthorized)
        {
            // The user is not authorized => no need to continue
            return false;
        }

        // At this stage we know that the user is authorized => we can fetch
        // the username
        string username = httpContext.User.Identity.Name;

        // Now let's fetch the account number from the request
        string account = httpContext.Request["accountNumber"];

        // All that's left is to verify if the current user is the owner 
        // of the account
        return IsAccountOwner(username, account);
    }

    private bool IsAccountOwner(string username, string account)
    {
        // TODO: query the backend to perform the necessary verifications
        throw new NotImplementedException();
    }
}
Спасибо @ Darin Димитров Nil Pun

Похожие вопросы