ASP.NET MVC, атрибут «Требуется билет»

Я пытаюсь создать систему, которая позволяет пользователям выполнять определенные действия, но их учетная запись должна иметь определенное ' Билет за раз, когда они это делают. Например, предположим, что они хотят создать Продукт , им потребуется CreateProductTicket .

Я мог бы просто сделать это с помощью некоторых операторов if, конечно, но я хочу попробовать более надежное решение. Моя структура выглядит примерно так ...

interface ITicket<T> where T : ITicketable
{
}

Моя основная цель состоит в том, чтобы создать Атрибут, возможно, подобный следующему ..

public class TicketRequiredAttribute : Attribute
{
 public TicketRequiredAttribute(ITicket<T> ticket)
 {
  if(ticket == null) 
    return;
  }
}

И иметь возможность украсить Контроллер или Действия с хранилищем этим. Так что вроде ...

ProductsControlller

[TicketRequired(CreateProductTicket)]
public ActionResult CreateProduct(Product product)
{
 // ... **I am unsure how to tell if TicketRequired was true or not**
}

Проблема 1

Я недостаточно знаком с атрибутами, чтобы знать, как определить, выполнено ли TicketRequired или нет. Может ли кто-нибудь просветить меня по этому поводу?

Проблема 2

Проблема, с которой я столкнулся, связана с запросами к базе данных. Я хочу иметь возможность проверить пользователя ( IMembershipRepository имеет метод GetUser ), но я не совсем уверен, как это сделать с помощью атрибута.

Используя Castle.Windsor , у меня настроено внедрение зависимостей для внедрения репозиториев в контроллеры. Я полагаю, что мог бы передать IMembershipRepository через конструктор TicketRequired , но у меня есть ощущение, что это станет очень беспорядочным и крайне нестабильным. Есть ли более логичный способ подойти к этому?

6
задан Ciel 22 December 2010 в 16:49
поделиться