Вы хотите, чтобы пользователи и роли, то есть вы хотите аутентифицировать пользователей и разрешать им полномочия с использованием ролей. Я бы настоятельно рекомендовал не сворачивать ваши собственные, как в 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.
Я понимаю сходство с http://stackoverflow.com/q/8339910/694325, но я хочу знать, с чего начать и какие разные варианты. Вопрос и ответы кажутся неприемлемыми для моей ситуации, когда я понятия не имею о том, как это сделать. – Nenotlep