ASP.NET MVC Design Вопрос Куда поместить код конкретного пользователя / уровня доступа - PullRequest
4 голосов
/ 25 января 2010

Итак, я успешно реализовал свой собственный MembershipProvider, и он работает именно так, как я и предполагал.

Я украсил свои действия контроллера атрибутом [Authorize], и ​​это также работает точно так, как я хочу.

У меня вопрос: куда мне поместить код, определяющий, «сколько» имеет доступ к использованию?

[Авторизовать] просто означает, что текущий пользователь является действительным пользователем системы. Текущий пользователь может иметь UserAccess = 1, или 2, или 4, или 8 или что-то еще. Буду ли я выполнять эту проверку в методе контроллера? или я должен передать пользователя в свой класс репозитория, и чтобы класс репозитория возвращал только те записи, к которым у текущего пользователя есть доступ?

Другими словами, как лучше отделить эту проблему? так как это связано с аутентификацией. Я думаю, что я должен передать пользователя в метод Repository.GetData () и заставить его выполнить необходимый поиск.

Вторая часть этого квеста: как мне ограничить доступ к определенному представлению на основе пользователя? Например, если текущий пользователь имеет UserAccess = 2, я хочу пропустить некоторые поля, но если его UserAccess = 4, я хочу показать все поля.

Обновление

После нескольких дополнительных исследований, похоже, что я мог бы убить двух зайцев одним выстрелом, если бы внедрил свой собственный RoleProvider - я вижу, как я могу сделать это, чтобы ограничить доступ к данным на контроллере [Authorize(Roles = "Admin)], и это выглядит как лучший вариант для меня. Как я могу использовать это для рендеринга моего представления по-разному в зависимости от роли? Буду ли я создавать отдельные виды и возвращать правильный вид из контроллера? Или сделать один просмотр с помощью встроенного C #?

Ответы [ 2 ]

1 голос
/ 26 января 2010

Первая часть вашего вопроса: держите контроллер тонким и поместите код уровня доступа в свой класс / модель репозитория. Вторая часть вашего вопроса: вы можете создавать различные представления для каждого уровня доступа. Или вы можете поместить логику в само представление, чтобы проверить уровень доступа пользователя, но это довольно хакерский и небезопасный. Я просто хотел бы, чтобы представление не отображало никаких полей, которые возвращаются пустыми / пустыми из модели.

0 голосов
/ 26 января 2010

Вы можете создать свой собственный AuthorizeAttribute, который принимает UserRole, необходимый для выполнения этого действия в параметре.

[CustomAuthorize(UserRole.Administrator)]
public ActionResult YourAction()
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...