Как использовать атрибуты, основанные на условии.(отключить по флагу) - PullRequest
0 голосов
/ 24 февраля 2019

Я использую атрибут "Authorize" from: System.Web.Http

на базовом контроллере.

проблема в том, что мне нужно использовать его в зависимости от условия.

(скажем, у меня есть режим, в котором мне не нужна аутентификация / авторизация).

как мне этого добиться?

спасибо.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Вы можете использовать AllowAnonymousAttribute в определенном методе или контроллере, чтобы "переопределить" AuthorizeAttribute, используемый в вашем базовом контроллере.

Проверьте ссылку: https://docs.microsoft.com/en-us/previous-versions/aspnet/hh835113(v%3dvs.118)

В качестве другой опции выМожно создать собственный атрибут и использовать его внутри вашего базового контроллера.Таким образом вы можете добавить всю логику, необходимую для принятия решений, в пользовательский атрибут.

Проверьте ссылку: https://docs.microsoft.com/en-us/dotnet/standard/attributes/writing-custom-attributes

Regards, LA.

0 голосов
/ 24 февраля 2019

Ну, один из способов сделать это - переопределить AuthorizeAttribute и добавить в него собственную логику.Здесь у нас есть два случая, если вы хотите использовать его с контроллером MVC, переопределить метод AuthorizeCore() и использовать пространство имен System.Web.Mvc, например:

public class MyCustomAuthorizeAttribute: AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var authorized = base.AuthorizeCore(httpContext);
        bool isExceptionalCase = GetIfExceptional();//Assuming here where you look for some other condition other than user is authorized
        if (!isExceptionalCase && !authorized)
        {
            // The user is not authorized => no need to go any further
            return false;
        }

        return true;
    }
}

Второй случай, и он находится вВ вашем случае вы будете использовать его с контроллером WebApi, вместо этого вы можете переопределить IsAuthorized() и использовать System.Web.Http namespace:

public class MyCustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        var authorized = base.IsAuthorized(actionContext);
        bool isExceptionalCase = GetIfExceptional();//Assuming here where you look for some other condition other than user is authorized
        if (!isExceptionalCase && !authorized)
        {
            // The user is not authorized => no need to go any further
            return false;
        }

        return true;
    }
}

Затем используйте пользовательский атрибут для действия или контроллера вместо стандартного:

[MyCustomAuthorize]
public ActionResult MyAction()
{
    ...
}
...