РЕДАКТИРОВАТЬ - мой исходный вопрос был изменен, чтобы было немного больше информации.
Справочная информация
На работе я работаю над веб-приложением ASP.Net для наших клиентов. В нашей реализации мы используем такие технологии, как проверка подлинности с помощью форм с помощью MembershipProviders и RoleProvider. Все шло хорошо, пока я не столкнулся с некоторыми трудностями при настройке ролей, потому что роли не являются общесистемными, а связаны с учетными записями клиентов и проектами.
Я не могу назвать нашу точную настройку / формулу, потому что я думаю, что наша компания не одобрит это ...
Что такое заказчик / проект?
Наша компания предоставляет управленческую информацию для наших клиентов ежегодно (или с другой периодичностью).
В наших системах заказчик / контракт состоит из:
- одна учетная запись: информация о компании
- на Аккаунт, один или несколько Продуктов: набор предоставляемой нами управленческой информации
- на продукт, одно или несколько измерений: период времени, в течение которого мы собираем и сообщаем данные
Настройка сайта экстрасети
В конечном итоге мы хотим, чтобы все клиенты имели доступ к своей управленческой информации с помощью нашей онлайн-системы. Экстранет состоит из двух сайтов:
- Сайт компании: предоставляет обзор информации об Учетной записи и Продуктах.
- Место измерения: после выбора измерения отображается подробная информация за этот период времени.
Сайт измерения - самая интересная часть экстранета. Мы создадим подмодули для новых обзоров, отчетов, управления и поддержки ресурсов, важных для исследования.
Наше решение Visual Studio состоит из нескольких проектов. Одно веб-приложение под названием Portal за основу. Сайты и модули представляют собой виртуальные каталоги в этом приложении (упрощает совместное использование MasterPages среди вещей).
Какие роли?
Следующие пользователи (читай: роли) будут использовать систему:
- Администраторы: пользователи разработчиков :) (не связанные с клиентами, полный доступ)
- Сотрудники: сотрудники нашей компании (не связанные с клиентами, полный доступ)
- Суперпользователь клиента: менеджеры высшего уровня (полный доступ к своей учетной записи / измерениям)
- Контактное лицо с клиентом: основное контактное лицо (полный доступ к их измерениям)
- Менеджер по работе с клиентами: руководитель отдела (ограниченный доступ, конкретные данные измерения)
А как насчет пользователей ASP.Net?
В системе будет много пользователей ASP.Net, давайте сосредоточимся на пользователях-клиентах:
- Пользователи не разделяются между учетными записями
- SuperUser X автоматически получает доступ ко всем (и новым) измерениям
- Пользователь Y может быть основным контактным лицом для измерения 1, но не иметь роли для измерения 2.
- Пользователь Y может быть основным контактным лицом для измерения 1, но иметь роль менеджера для измерения 2.
- Руководителями отделов являются многие индивидуальные пользователи (для каждого измерения), если бы у менеджера Z был логин для измерения 1, мы хотели бы снова использовать этот логин, если он участвует в измерении 2.
Структура URL
Это типичные URL в нашем приложении:
- http://host/login - экран входа в систему
- http://host/project - экран обзора учетной записи / продукта (выбор измерения)
- http://host/project/1000 - подробности измерения (id: 1000)
- http://host/project/1000/planning - обзор планирования (для основного контактного лица / суперпользователя)
- http://host/project/1000/reports - загрузка отчетов (менеджер отдела X может только получить доступ к отчету ИКС)
Мы также создадим URL-адрес документа, по которому вы можете запросить конкретный документ по его GUID. Система должна будет проверить, есть ли у пользователя права на документ. Документ связан с Измерением, Пользователь или определенные роли имеют определенные права на документ.
В чем проблема? (наконец;))
Ролей недостаточно, чтобы определить, что пользователю разрешено просматривать / получать доступ / загружать определенный элемент. Недостаточно сказать, что тот или иной элемент навигации доступен менеджерам. Когда пользователь запрашивает Измерение 1000, мы должны проверить, что у пользователя есть не только роль Менеджера, но и роль Менеджера для Измерения 1000.
Вкратце:
Как мы можем ограничить пользователей их учетными записями / измерениями?
(помните, что суперпользователи видят все измерения, а некоторые менеджеры - только определенные измерения)Как мы можем применить роли на уровне продукта / измерения? (пользователь X может быть основным контактом для измерения 1, но только менеджером для измерения 2)
Как мы можем ограничить доступ менеджера к экрану отчетов и только к отчетам их отдела?
И все это с волшебством классов asp.net, возможно, с настраиваемой реализацией поставщика ролей.
Аналогичный вопрос / проблема Stackoverflow
ASP.NET, как управлять пользователями с разными типами ролей