można zmienić filtr aby umożliwić wielu ustawiając AllowMultiple = true
w atrybucie AttributeUsage
na swojej klasy atrybutu i dodaj czek tak, że jeśli filtr jest obecne kilka razy, globalnie zastosowano jeden nie wykonuje się. Przekaźnik ActionExecutingContext
, który zostanie przekazany do OnActionExecuting()
, umożliwia pobranie filtrów za pośrednictwem filterContext.ActionDescriptor.GetCustomAttributes()
, dzięki czemu można z nich korzystać tutaj.
Następnie zmień konstruktor, aby można było przekazać parametr (prawdopodobnie wyliczenie), którego może użyć do określenia, która metoda autoryzacji ma być używana - normalna lub inna. Nadaj temu parametrowi wartość domyślną, która sprawia, że wybiera ona zwykłą metodę auth. Następnie, w tej metodzie, która wymaga innej metody uwierzytelniania, można zastosować filtr z inną wartością parametru. Więc może wyglądać tak:
public class CustomAuthAttribute : AuthorizeAttribute
{
public CustomAuthAttribute(AuthMethod method = AuthMethod.StandardAuth)
{
//stuff
}
}
[CustomAuth(AuthMethod.WeirdAuth)]
public ActionResult MethodThatNeedsDifferentAuth()
{
//stuff
}
Nie zajmowałem się filtrami, ale czy to zadziała? http://msdn.microsoft.com/en-us/library/b6x6shw7(v=vs.71).aspx Używam elementów lokalizacji do ominięcia autoryzacji na kilku stronach. – Pete