Я пытаюсь создать систему, которая позволяет пользователям выполнять определенные действия, но их учетная запись должна иметь определенный «билет» каждый раз, когда они это делают. Например, предположим, что они хотят создать Product
, им понадобится CreateProductTicket
.
Конечно, я мог бы просто сделать это с помощью некоторых «если», но я хочу попробовать более надежное решение. Моя структура выглядит примерно так ...
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
, я настроил Dependency Injection, чтобы вводить репозитории в контроллеры. Я полагаю, что мог бы передать IMembershipRepository
через конструктор TicketRequired
, но у меня есть ощущение, что оно станет очень грязным и крайне нестабильным. Есть ли более логичный способ подойти к этому?