public ActionResult Create(CreateContentTypeViewModel model)
        {
            // список контроллеров и их экшенов
            List <ControllerAction> caList = new List <ControllerAction>();

            // десериализуем 'model.caList'
            var new_caList = json.Deserialize(model.caList, caList.GetType());

            // наполняем список
            caList         = (List <ControllerAction>)new_caList;
            ViewBag.caList = caList;

            // список групп типов контента
            List <ContentGroup> contentgrouplist = contenttype.GetContentTypeGroups(null);

            ViewBag.ContentGroupList = contentgrouplist;

            ViewBag.EmptyCaListKey = 1; // список 'caList' не пуст

            // валидация модели
            if (ModelState.IsValid)
            {
                int selected = 0;
                int title    = 0;

                // проверка списка экшенов на Selected (должен быть хотя бы один и его название)
                foreach (var i in model.Actions)
                {
                    if (i.Selected)
                    {
                        selected = 1;
                        title    = 0; // сброс флага названия, т.к. найден отмеченный экшен

                        // пусто / null ли название
                        if (!string.IsNullOrEmpty(i.Title))
                        {
                            title = 1;
                        }
                        else
                        {
                            break; // выход из цикла, если нет названия для текущего экшена
                        }
                    }
                }

                // если выбран хотя бы один экшен и есть его название
                if (selected == 1 && title == 1)
                {
                    // восстанавливаем нулевую запись экшена - контроллер
                    Permission action = new Permission()
                    {
                        Name     = model.Controller,
                        Title    = "",
                        Selected = true
                    };

                    // помещаем наш контроллер в начало 'model.Actions'
                    model.Actions.Insert(0, action);

                    // наполняем объект данными
                    ContentType ct = new ContentType()
                    {
                        Name         = model.Name,
                        Controller   = model.Controller,
                        Actions      = model.Actions,
                        contentGroup = model.contentGroup
                    };

                    // создание нового типа контента
                    if (contenttype.CreateContentType(ct))
                    {
                        // лог
                        logging.Logged(
                            "Info"
                            , "Пользователь " + User.Identity.Name + " добавил тип контента: '" + model.Name + "'"
                            , this.GetType().Namespace
                            , this.GetType().Name
                            );

                        return(Json(new { result = "Redirect", url = Url.Action("Index", "ContentType") }));
                    }

                    // удаляем из 'model.Actions' нулевой элемент - контроллер,
                    // чтобы не нарушить структуру при возвращении 'CreatePartial'
                    model.Actions.RemoveAt(0);

                    ModelState.AddModelError("", "Этот тип контента уже используется");
                }
                else
                {
                    ModelState.AddModelError("", "Укажите хотя бы один экшен. Для указанных экшенов название обязательно.");
                }
            }
            else
            {
                ModelState.AddModelError("", "Ошибка, пожалуйста проверьте данные");
            }

            return(PartialView(model));
        }
        public ActionResult Add(CreateChangeRoleViewModel model)
        {
            // ActionResult для ajax BeginForm
            ViewBag.ActRes = "Add";

            // список групп типов контента
            List <ContentGroup> cgList = contenttype.ContentGroupList("");

            // закидываем список групп типов контента
            ViewBag.cgList = cgList;

            // если список типов контента пуст, то невозможно создать роль (он уже не пуст)
            ViewBag.Empty_ctList = 1;

            // валидация модели
            if (ModelState.IsValid)
            {
                int selected = 0;

                // проверка списка экшенов (мин. 1 должен быть 'Selected', исключая контроллер)
                foreach (var i in model.ContentTypes)
                {
                    // отключаем 'Selected' у контроллера
                    i.Actions[0].Selected = false;

                    // остальные экшены
                    foreach (var j in i.Actions)
                    {
                        if (j.Selected)
                        {
                            selected = 1;
                        }
                    }

                    // включаем 'Selected' у контроллера
                    i.Actions[0].Selected = true;
                }

                // если выбрано хотя бы одно разрешение
                if (selected == 1)
                {
                    // создание новой группы пользователей
                    if (account.CreateRole(model.Name, model.ContentTypes))
                    {
                        // обновляем хранилище ролей
                        RoleConfig.RepositoryRoles();

                        // лог
                        logging.Logged(
                            "Info"
                            , "Пользователь '" + User.Identity.Name + "' добавил роль: " + model.Name.ToString()
                            , this.GetType().Namespace
                            , this.GetType().Name
                            );

                        return(Json(new { result = "Redirect", url = Url.Action("Group", "System") }));
                    }

                    ModelState.AddModelError("", "Эта группа уже используется");
                }
                else
                {
                    ModelState.AddModelError("", "У группы должно быть хотя бы одно разрешение.");
                }
            }
            else
            {
                ModelState.AddModelError("", "Ошибка, пожалуйста проверьте данные");
            }

            return(PartialView("CreateChangeRole", model));
        }
        public ActionResult Login(LoginViewModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                if (account.Authenticate(model.UserName, model.Password))
                {
                    // данные потльзователя
                    List <User> user = new List <User>();
                    user = account.UsersList(model.UserName);

                    // активен ли пользователь
                    if (user[0].IsActive == 1)
                    {
                        FormsAuthentication.SetAuthCookie(model.UserName, false);

                        // лог
                        logging.Logged(
                            "Info"
                            , "Пользователь '" + model.UserName + "' вошел в систему"
                            , this.GetType().Namespace
                            , this.GetType().Name
                            );

                        return(Json(new { result = "Redirect", url = Url.Action("Index", "Home") }));
                    }
                    else
                    {
                        // лог
                        logging.Logged(
                            "Error"
                            , "Отказано в доступе: пользователь '" + model.UserName + "' неактивен"
                            , this.GetType().Namespace
                            , this.GetType().Name
                            );

                        ModelState.AddModelError("", "Отказано в доступе");
                    }
                }
                else
                {
                    //// лог
                    //logging.Logged(
                    //      "Error"
                    //    , "Ошибка аутентификации: '" + model.UserName + "' - неправильный логин или пароль"
                    //    , this.GetType().Namespace
                    //    , this.GetType().Name
                    //);

                    ModelState.AddModelError("", "Неправильный логин или пароль");
                }
            }
            //else
            //{
            //    // лог
            //    logging.Logged(
            //            "Error"
            //        , "Ошибка аутентификации: '" + model.UserName + "' - неправильный логин или пароль"
            //        , this.GetType().Namespace
            //        , this.GetType().Name
            //    );

            //    ModelState.AddModelError("", "Ошибка аутентификации");
            //}

            return(PartialView("LoginPartial", model));
        }