Ссылка на базу данных членства ASP.NET в другой базе данных - PullRequest
1 голос
/ 01 января 2011

Я делаю простую веб-страницу ASP.NET для моей школьной организации, используя VS2010. Когда я выбираю «Новый веб-сайт», я вижу, что Visual Studio уже настраивает базу данных для управления членством. У меня также есть собственная база данных (MyDatabase), которую мне нужно использовать для сайта, которая содержит информацию о членах организации (например, электронную почту, номер телефона и т. Д.)

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

Я подумал об этом:
- Добавьте в MyDatabase поле с именем «UserName» и используйте его в качестве своего рода внешнего ключа из другой базы данных.
- Получить имя пользователя, вошедшего в систему
- Используйте это имя пользователя для моих запросов. Например:

// (PseudoCode)    
String loggedInUser = MembersDatbase.GetLoggedInUser();    
var MemberInfo = SELECT * FROM MyDatabase.Users WHERE UserName=loggedInUser;

-Тогда зарегистрированный пользователь будет иметь доступ только к своей информации.

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

Спасибо.

Ответы [ 3 ]

3 голосов
/ 01 января 2011

Вместо использования базы данных по умолчанию, созданной шаблоном веб-сайта, я бы предложил использовать aspnet_regsql.exe для установки таблицы членства в существующую базу данных MyDatabase. Тогда вместо связывания через имя пользователя я бы связал таблицу, используя поле UserId таблицы aspnet_Users. Проверьте ссылки ниже:

1: Учебник. Установка таблицы членства в существующей базе данных , Проверьте видео здесь.

2: Свяжите таблицу членства с таблицей информации пользователя

1 голос
/ 01 января 2011

Я использую аналогичный подход в моем приложении.У меня есть отдельная БД для членства, и при сохранении дополнительных данных о пользователе я просто получаю ProviderUseKey и сохраняю его в отдельной таблице, содержащей дополнительные данные пользователя.

Вот пример кода:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Register(string userName, string email, string password, string confirmPassword)
    {
        ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

        if (ValidateRegistration(userName, email, password, confirmPassword))
        {
            // Attempt to register the user
            var createStatus = MembershipService.CreateUser(userName, password, email);


            switch (createStatus)
            {
                case MembershipCreateStatus.Success:
                    FormsAuth.SignIn(userName, false /*createPersistentCookie */);
                    var userInfo = System.Web.Security.Membership.GetUser(userName);
                    if (userInfo != null)
                    {
                        if (userInfo.ProviderUserKey != null)
                        {
                            var regularUser = new RegularUser { UserName = userInfo.UserName, Email = userInfo.Email, ProviderUserKey = userInfo.ProviderUserKey.ToString() };
                            _regularUserRepository.SaveOrUpdate(regularUser);
                        }
                    }
                    return RedirectToAction("Index", "Home");
                default:
                    ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus));
                    break;
            }
        }

        // If we got this far, something failed, redisplay form
        return View();
    }

Надеюсь, это поможет.

1 голос
/ 01 января 2011

Я бы использовал этот подход, но я бы использовал значения свойств ProviderUserKey и ProviderName для сопоставления с пользователем в вашей базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...