Как мне соотнести пользователей с объектами домена? - PullRequest
2 голосов
/ 28 июля 2011

Я хотел бы использовать встроенные поставщики членства и роли ASP.NET для создания системы, которая ограничивает возможности просмотра и редактирования каждого аутентифицированного пользователя.

В программном обеспечении уже есть понятия «Элементы»и "Группы".Каждый предмет принадлежит группе.

Пользователи системы в действительности принадлежат к одним и тем же группам.В настоящее время это не отражено в модели моего домена.

Существует два уровня привилегий, которые я хотел бы расширить для этих пользователей: Просмотр и Редактирование.Если они находятся в группе, я бы хотел, чтобы они могли просматривать элементы в этой группе.Если у них есть права на редактирование в этой группе, я бы хотел, чтобы они могли редактировать элементы этой группы.

Пользователи обычно принадлежат 1 группе, но могут в какой-то момент принадлежать нескольким.Возможно, у пользователя могут быть права на просмотр нескольких групп, но права на редактирование есть только у 1 (или некоторых) групп, которые он может просматривать.

Я не уверен, как с этим справиться.Должен ли я просто создать 2 роли (используя поставщика ролей asp.net) для каждой группы, то есть Group1View, Group1Edit и так далее?Или я должен создать другую таблицу, которая создает связь между таблицей aspnet_Users и таблицей Groups с третьим столбцом, определяющим уровень их привилегий?

В конечном итоге я хотел бы реализовать проверки привилегий, аналогичные тем, о которых писал Стив Смитздесь: http://stevesmithblog.com/blog/favor-privileges-over-role-checks/

Спасибо за любой вклад, который вы можете предложить!

1 Ответ

2 голосов
/ 29 июля 2011

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

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

Поставщик ролей в конечном итоге станетСлишком строгие ограничения для ваших нужд в долгосрочной перспективе.

HTH.

...