public ActionResult Register(RegisterModel model) { if (WebSecurity.UserExists(model.UserName)) { return(Json("Error", "Пользователь с таким логином уже существует")); } if (!WebSecurity.IsAuthenticated) { if (ModelState.IsValid) { try { WebSecurity.CreateUserAndAccount(model.UserName, model.Password); //Membership.CreateUser(model.UserName, model.Password, model.Email, //passwordQuestion: null, passwordAnswer: null, isApproved: true, //providerUserKey: null, status: out createStatus); WebSecurity.RequireRoles(); //Send E-mail string title = "Добро пожаловать!"; string message = "Вы зарегистрировались в системе http://mytsn.ru\n" + "Ваши логин: " + model.UserName + "\n Пароль: " + model.Password + "\nДля получения полного доступа к функционалу Вам необходимо заполнить анкету и отправить запрос на активацию."; SendMail("smtp.yandex.ru", "*****@*****.**", "321654as", model.UserName, title, message); WebSecurity.Login(model.UserName, model.Password); Account_model result = new Account_model(); result.id = WebSecurity.CurrentUserId; result.Login = WebSecurity.CurrentUserName; result.Roles = Roles.GetRolesForUser(); return(Json(result)); } catch (MembershipCreateUserException ex) { ModelState.AddModelError("Ошибка при регистрации: ", ErrorCodeToString(ex.StatusCode)); Logger.Log.Error("Ошибка при регистрации: ", ex); return(Json("Error", "Ошибка при регистрации: " + ErrorCodeToString(ex.StatusCode))); } } if (string.IsNullOrEmpty(model.UserName)) { return(Json("Error", "Введите E-mail")); } if (string.IsNullOrEmpty(model.Password)) { return(Json("Error", "Пустой пароль")); } } WebSecurity.Logout(); return(Json("Error", "Ошибка при регистрации")); }
// [ValidateJsonAntiForgeryToken] public ActionResult Index(LoginModel model) { if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) { uk_profile uk_u = null; uk_profile uk_a = null; try { Account_model result = new Account_model(); result.id = WebSecurity.GetUserId(model.UserName); result.Login = model.UserName; UserProfile user = repository.UserProfile.Where(p => p.UserId.Equals(result.id)).SingleOrDefault(); Admtszh admtszh = repository.Admtszh.Where(p => p.AdmtszhId.Equals(result.id)).SingleOrDefault(); if ((user == null) && (admtszh == null)) { //Пользователь не принадлежайщий никакому ТСЖ //т.е не имеющий роли, просто входит FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); return(Json(result)); } string requestDomain = Request.Headers["host"]; if (user != null) { uk_u = repository.uk_profile.Where(p => p.id.Equals(user.id_uk)).SingleOrDefault(); } if (admtszh != null) { uk_a = repository.uk_profile.Where(p => p.id.Equals(admtszh.id_uk)).SingleOrDefault(); } //Если пользователь имеет несколько ролей в разных ТСЖ var myList = new List <string>(); foreach (var role in Roles.GetRolesForUser(model.UserName)) { if (user != null) { if (requestDomain.Equals(uk_u.host) && role.Equals("User")) { myList.Add(role); } } if (admtszh != null) { if (requestDomain.Equals(uk_a.host) && role.Equals("Moder")) { myList.Add(role); } } } result.Roles = myList.ToArray(); if (result.Roles.Count() > 0) { foreach (var role in result.Roles) { if (role.Equals("User")) { if (user != null) { if (requestDomain.Equals(uk_u.host)) { //User have direct company FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); return(Json(result)); } else { //User have no current direct company //TempData["message"] = string.Format("Хост: \"{0}\" ", requestDomain); //WebSecurity.Logout(); return(Json(new string[] { "Error", "Имя пользователя или пароль не принадлежат данному домену" })); } } } if (role.Equals("Moder")) { if (admtszh != null) { if (requestDomain.Equals(uk_a.host)) { //User have direct company FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); return(Json(result)); // return new HttpStatusCodeResult(200, "{id:"+ WebSecurity.CurrentUserId.ToString() + "}"); } else { //User have no current direct company //TempData["message"] = string.Format("Хост: \"{0}\" ", requestDomain); // return(Json(new string[] { "Error", "Имя пользователя или пароль не принадлежат данному домену" })); } } } if (role.Equals("Admin")) { //Админов просто авторизовать FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); return(Json(result)); } } WebSecurity.Logout(); } } catch (Exception ex) { Logger.Log.Error("Внутренняя ошибка при авторизации пользователя" + model.UserName, ex); } } return(Json(new string[] { "Error", "Имя пользователя или пароль указаны неверно." })); }