ссылки действий со значком разрешения (значок) для всех моделей: как? - PullRequest
0 голосов
/ 21 сентября 2009

У меня есть несколько моделей, для которых я хочу показать некоторые общие значки для ссылок действий (новые, подробности, редактирование, удаление) и некоторые конкретные только для определенных моделей; эти пиктограммы должны отображаться только тогда, когда у пользователя есть разрешение на выполнение действия. Разрешения определяются ролями, но я бы хотел абстрагировать их, чтобы явно необходимые роли были записаны только в одном месте.

Я также хотел бы использовать ту же логику для отображения значков и «защиты» методов действий, так что если раньше для редактирования lolcatz требовалась Foo роль, а теперь я хочу изменить ее на Bar роль, мне нужно только изменить одну вещь.

Есть много способов реализовать это, и я не уверен, как поступить.

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

Мои сомнения:

  • как мне связать модели с ModelActionsCollection? Должен ли я использовать хеш или какой-то статический класс, например SomeStaticClass.GetModelActionsCollection(someModel)? или typeof(someModel), или "className" или как?

  • как мне украсить методы? я должен написать что-то вроде:

    [MyAuthorize("action", "model")]
    public ActionResult action(...)
    

    или что-то еще?

  • Можно ли получить доступ к текущему аутентифицированному пользователю непосредственно внутри методов этих классов или они должны получить пользователя в качестве параметра?

  • к какому пространству имен принадлежат эти классы? они модели? хелперы? или что?

  • и, наконец: кто-нибудь уже сделал все это повторно?

1 Ответ

0 голосов
/ 21 сентября 2009

Мы делаем именно это

Украсьте свое действие флагом типа разрешения и строкой для значка в CSS например [ActionModelPermission (typeof (ContactModel), PermissionTypes.Create | PermissionTypes.Edit, "typeIcon typeContact")]]

ActionModelPermission, PermissionTypes и ContactModel - это все классы в нашем проекте.

Затем у нас есть наш собственный помощник ActionLink, который находит метод из предоставленной лямбды и выполняет проверку прав доступа, а также создает ссылку с соответствующим классом css

...