2012-03-20 2 views
0

Здесь так много информации и терминов. Мне сложно начать думать о пользователях. Какие у меня варианты для создания пользовательского веб-приложения ASP.net MVC 3? Я читал о членстве, поставщиках, авторизации, проверке подлинности, сеансе, куках, ролях и профилях, но я не могу понять, как справиться с ситуацией.Где я должен начать с выбора и внедрения системы пользователя/роли ASP.net MVC 3?

Каковы преимущества/недостатки использования встроенного решения для Microsoft? Что это даже называется? Могу я использовать только свою собственную базу данных (сначала я хочу работать с базой данных)?

На мой взгляд, я так думаю: у меня есть пользователи и роли в базе данных. У пользователей есть роли. Я хочу запретить доступ к некоторым действиям в зависимости от того, зарегистрирован ли пользователь и имеет ли определенная роль. Я слишком упрощаю проблему? С чего начать?

На данный момент я думаю о создании 100% -ной системы домашнего приготовления, например, когда я развивался с использованием PHP, но поскольку есть так много информации, я чувствую, что это не будет хорошим подходом здесь.

+0

Я понимаю сходство с http://stackoverflow.com/q/8339910/694325, но я хочу знать, с чего начать и какие разные варианты. Вопрос и ответы кажутся неприемлемыми для моей ситуации, когда я понятия не имею о том, как это сделать. – Nenotlep

ответ

1

Вы хотите, чтобы пользователи и роли, то есть вы хотите аутентифицировать пользователей и разрешать им полномочия с использованием ролей. Я бы настоятельно рекомендовал не сворачивать ваши собственные, как в PHP. Вместо этого я рекомендую использовать службы .NET «Provider», в частности, MembershipProvider (для аутентификации) и RoleProvider (для авторизации).

Вы по-прежнему можете использовать Провайдеров с собственным DB, они не являются эксклюзивными и не содержат кода в первую очередь. Однако я бы рекомендовал НЕ хранить информацию о приложении для конкретного пользователя в пользовательских или пользовательских таблицах Поставщика. Вместо этого вы можете иметь свой собственный код User и связать его с системой членства через имя пользователя пользователя.

Причина, по которой я рекомендую это, заключается в том, что она уменьшает объем работы, которую вы должны выполнять. Вам не нужно беспокоиться о шифровании или хешировании паролей - поставщик делает это за вас. У вас есть полный API для управления вашими пользователями и ролями через пространство имен System.Web.Security.

Что касается Profile s, это отдельная служба провайдера, которую вам не нужно использовать. Он позволяет хранить информацию о пользователях независимо от того, зарегистрированы они для учетной записи пользователя в вашей системе. Технически вы можете иметь «анонимных пользователей», но каждый, кто создал пароль на основе пароля, вместо этого упоминается как «член».

Что касается куки-файлов, аутентификация пользователя в .NET осуществляется через класс FormsAuthentication. После аутентификации пользователя с использованием System.Web.Security.Membership вы можете позвонить FormsAuthentication.SetAuthCookie, чтобы написать свой файл cookie для проверки подлинности. Это полностью интегрирует как User, так и их Roles в собственность Controller.User, которая реализует интерфейс IPrincipal. Вы можете использовать этот объект, чтобы получить имя пользователя, а также выяснить, какие роли они находятся.

Ответить на комментарии

I answered a very similar question here. В принципе, зависит от вас, есть ли у вас членство в отдельном db, чем ваше приложение, но я считаю это хорошей практикой, потому что я сделал это довольно много, и у меня нет никаких жалоб. Особенно, если вы сначала используете код, так как вы можете потерять весь свой дБ, если используете инициализаторыили DropCreateDatabaseAlways.

Существует также новый членский провайдер. Я думаю, что пакет NuGet называется «ASP.NET Universal Providers», и они находятся в пространстве имен System.Web.Providers вместо старого пространства имен System.Web.Security. У меня еще не было возможности работать с ними, но из того, что я собираю, они в большей степени совместимы с кодом. Во-первых, таблицы не называются aspnet_Foo, и нет никаких видов или хранимых процедур, созданных в db. Названия таблиц просто нормальные dbo.Users, dbo.Roles и т. Д.

Что касается ссылок пользователей-поставщиков с вашим приложением (содержанием) Пользовательские объекты, см. Ответ, который я связал с выше. Самый простой способ сделать это - просто иметь поле в своем содержании db для UserName и связать его с провайдером db's UserName. Никаких внешних ключей не требуется, поскольку вы интегрируете их на уровне приложения, а не на уровне db.

+0

Это был именно тот ответ, который я искал. Я останусь открытым на какое-то время в случае комментариев и т. Д., Но вы сделали вещи для меня немного более ясными! При сохранении информации о пользователе: вы предлагаете, чтобы у меня была таблица с первым кодом пользователя, хранящаяся где-нибудь (?) Отдельно от моей базы данных контента? Означает ли это, что таблица пользователей провайдера находится в 1 базе данных и моей «нормальной» таблице пользователей в моей базе данных контента и что они будут связаны каким-то образом? – Nenotlep

0

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

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

Просто, чтобы начать, с текстом из MSDN:

Авторизация определяет, должен ли личность быть предоставлен доступ к определенному ресурсу.

Аутентификация - это процесс получения идентификационных учетных данных, таких как имя и пароль, от пользователя и проверка этих учетных данных в отношении некоторых полномочий.

Представьте пользователей и ролей как пользователи и группы пользователей Windows. Например, веб-сайт для форумов может иметь пользователя с именем Auser со следующими ролями: пользователя, редактор, Модератор. На этом сайте они могут предоставить набор разрешенных действий: Пользователь может вводить новые сообщения, Редактор может изменять сообщения других людей и Модератор может закрыть или удалить сообщения или темы. Таким образом, единым веб-страницам не нужно знать пользователей, а просто роли (метод DeletePostPostController может быть украшен [Authorize(Roles = "Administrator, Moderator")]).

Начать чтение this very introductory article, он предоставляет дополнительные полезные ссылки.

Смежные вопросы