Я пытаюсь создать систему, которая позволяет пользователям выполнять определенные действия, но их учетная запись должна иметь определенное ' Билет за раз, когда они это делают. Например, предположим, что они хотят создать Продукт
, им потребуется CreateProductTicket
.
Я мог бы просто сделать это с помощью некоторых операторов if, конечно, но я хочу попробовать более надежное решение. Моя структура выглядит примерно так ...
interface ITicket<T> where T : ITicketable
{
}
Моя основная цель состоит в том, чтобы создать Атрибут, возможно, подобный следующему ..
public class TicketRequiredAttribute : Attribute
{
public TicketRequiredAttribute(ITicket<T> ticket)
{
if(ticket == null)
return;
}
}
И иметь возможность украсить Контроллер или Действия с хранилищем этим. Так что вроде ...
[TicketRequired(CreateProductTicket)]
public ActionResult CreateProduct(Product product)
{
// ... **I am unsure how to tell if TicketRequired was true or not**
}
Я недостаточно знаком с атрибутами, чтобы знать, как определить, выполнено ли TicketRequired или нет. Может ли кто-нибудь просветить меня по этому поводу?
Проблема, с которой я столкнулся, связана с запросами к базе данных. Я хочу иметь возможность проверить пользователя ( IMembershipRepository
имеет метод GetUser
), но я не совсем уверен, как это сделать с помощью атрибута.
Используя Castle.Windsor
, у меня настроено внедрение зависимостей для внедрения репозиториев в контроллеры. Я полагаю, что мог бы передать IMembershipRepository
через конструктор TicketRequired
, но у меня есть ощущение, что это станет очень беспорядочным и крайне нестабильным. Есть ли более логичный способ подойти к этому?