У меня есть несколько моделей, для которых я хочу показать некоторые общие значки для ссылок действий (новые, подробности, редактирование, удаление) и некоторые конкретные только для определенных моделей; эти пиктограммы должны отображаться только тогда, когда у пользователя есть разрешение на выполнение действия. Разрешения определяются ролями, но я бы хотел абстрагировать их, чтобы явно необходимые роли были записаны только в одном месте.
Я также хотел бы использовать ту же логику для отображения значков и «защиты» методов действий, так что если раньше для редактирования lolcatz требовалась Foo
роль, а теперь я хочу изменить ее на Bar
роль, мне нужно только изменить одну вещь.
Есть много способов реализовать это, и я не уверен, как поступить.
Я мог бы написать ModelAction
класс, отвечающий за определение разрешений, ссылку, значок, текст для одного действия и некоторые ModelActionsCollection
, чтобы собрать все возможные действия для одной модели, чтобы я мог написать родительский класс и несколько нисходящих.
Мои сомнения:
как мне связать модели с ModelActionsCollection
? Должен ли я использовать хеш или какой-то статический класс, например SomeStaticClass.GetModelActionsCollection(someModel)
? или typeof(someModel)
, или "className"
или как?
как мне украсить методы? я должен написать что-то вроде:
[MyAuthorize("action", "model")]
public ActionResult action(...)
или что-то еще?
Можно ли получить доступ к текущему аутентифицированному пользователю непосредственно внутри методов этих классов или они должны получить пользователя в качестве параметра?
к какому пространству имен принадлежат эти классы? они модели? хелперы? или что?
и, наконец: кто-нибудь уже сделал все это повторно?