Как управлять существенными функциональными различиями между типами пользователей в ASP.NET MVC2 - PullRequest
1 голос
/ 14 августа 2010

Я думаю, что, возможно, испортил мои контроллеры. У меня довольно простой сайт, который позволяет пользователям типа «Персонал» или «Клиент» просматривать проекты. Сотрудники имеют доступ ко всем проектам, могут добавлять и удалять их, добавлять и удалять пользователей, назначать клиентам разрешения для проектов и т. Д.

В нынешнем виде это означает, что у меня есть UserController и ProjectController, заваленные атрибутами аутентификации (т. Е. Клиент может изменить свою электронную почту, но ничего другого, как разрешения, а клиенты не могут добавлять / удалять / редактировать проекты, но могут просматривать свои содержание).

А также, исходя из типа / роли пользователя, я отключаю компоненты меню. Должен ли я разделять свои контроллеры, чтобы иметь более узкий фокус, или это кандидат на Области? Я «чувствую», что большая часть моего кода проверяет, может ли пользователь X выполнять действие Y, основываясь как на своей роли, так и на явных разрешениях для каждого проекта.

PS. Я переписал тему несколько раз, пытаясь сделать ее короче: \

1 Ответ

2 голосов
/ 14 августа 2010

Рассматривали ли вы разделение ваших контроллеров следующим образом:

  • ClientUserController

  • ClientProjectController

  • StaffUserController

  • StaffProjectController

Такое разделение позволит вам легко иметь специализированные контроллеры и представления для каждого типа пользователя. Для защиты доступа используйте один атрибут аутентификации в верхней части каждого контроллера «Staff».

Устанавливая соответствующие маршруты, вы можете поддерживать дружественные URL-адреса для каждого типа контроллера: например,

  • / Пользователь / Редактировать (Показывает все детали пользователя, но позволяет редактировать только поле электронной почты)
  • Персонал / Пользователь / Редактировать (Позволяет редактировать все Поля пользователя)
...