Как использовать пользовательский авторизеаэстерибут для контроллера, использующего значение параметра?

StackOverflow https://stackoverflow.com/questions/2822608

Вопрос

Я пытаюсь закрепить действия контроллера, чтобы предотвратить доступ пользователя доступа к объекту, к которому они не имеют доступа. Я могу сделать это со следующим кодом.

public ActionResult Entity(string entityCode)
{
    if (CurrentUser.VerifyEntityPermission(entityCode))
    {
        //populate viewModel...
        return View(viewModel);
    }
    return RedirectToAction("NoAccessToEntity", "Error");
}

Я хотел бы иметь возможность добавить атрибут для самого действия контроллера. Чтобы подтвердить доступ к объекту, мне необходимо увидеть, какое значение было передано контроллеру и какие объекты пользователь имеет доступ. Это возможно?

[EntityAuthRequired]
public ActionResult Entity(string entityCode)
{
        //populate viewModel...
        return View(viewModel);
}
Это было полезно?

Решение

Что-то вроде этого может помочь вам на вашем пути. Хотя вы можете добавить некоторые дополнительные свойства в свой атрибут, чтобы позволить вам указать параметр EntiteCode на каждое действие, а не жесткий код.

public class EntityAuthRequired : FilterAttribute, IAuthorizationFilter 
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        //Make sure that this is not NULL before assigning value as string...
        var entityCode = filterContext.RouteData.Values["entityCode"] as string;
        // do your logic...         
        if (!allowed)
            filterContext.Result = new HttpUnauthorizedResult();            
    }
}

Также, если entityCode не в ваших маршрутах, вы можете использовать filterContext.RequestContext.HttpContext.Request посмотреть на почтовые данные.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top