Пример #1
0
        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", "Ошибка при регистрации"));
        }
Пример #2
0
        //       [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", "Имя пользователя или пароль указаны неверно." }));
        }