Esempio n. 1
0
        public UserModule(IUserService _userService,
            ISiteService _siteService,
            IRoleService _roleService,
            IUserRoleMappingService _userRoleMappingService)
            : base("/user")
        {
            UserValidator uservalidator = new UserValidator();
            Get["/list"] = x =>
            {
                return View["User/List",_userService.GetAllUser()];
            };

            Get["/add"] = x =>
            {
                ViewBag.Errored = false;
                return View["User/Add", new User()];
            };

            Post["/add"] = x =>
            {
                User user = this.Bind<User>();
                ValidationResult results = uservalidator.Validate(user);
                if (!results.IsValid)
                {
                    ViewBag.ErrorMsg = HtmlUtils.GetCharisma_Alert(Charisma_AlertType.error,"错误信息", results.Errors);
                    ViewBag.Errored = true;
                    return View["User/Add", user];
                }
                if (_userService.CreateUser(user))
                {
                    ViewBag.ErrorMsg = "<strong>OK~</strong>";
                    ViewBag.Errored = true;
                    return View["User/Add", user];
                }

                ViewBag.ErrorMsg = "<strong>出错啦~</strong>";
                ViewBag.Errored = true;
                return View["User/Add", user];
                //return this.Context.GetRedirect("~/user/add?error=true");
                //return View["User/Add"];
            };

            Get["/edit/{id}"] = x =>
            {
                return View["User/Edit", _userService.GetByAutoId((int)x.id)];
            };

            Post["/edit/{id}"] = x =>
            {
                ViewBag.Errored = true;
                var user = this.Bind<User>();
                var model = _userService.GetById(user.ID);
                if (!String.IsNullOrEmpty(user.Password))
                {
                    model.PasswordSalt = PasswordUtil.GenerateSalt();
                    model.Password = PasswordUtil.EncodePassword(user.Password, model.PasswordFormat, model.PasswordSalt);
                    model.passwordConfirm = PasswordUtil.EncodePassword(user.passwordConfirm, model.PasswordFormat, model.PasswordSalt);
                }
                else
                {
                    model.passwordConfirm = model.Password;
                }
                model.PrivateEmail = user.PrivateEmail;
                model.Nickname = user.Nickname;
                model.Gender = user.Gender;
                model.Status = user.Status;
                ValidationResult results = uservalidator.Validate(model);
                if (!results.IsValid)
                {
                    ViewBag.ErrorMsg = HtmlUtils.GetCharisma_Alert(Charisma_AlertType.error, "错误信息", results.Errors);
                    return View["User/Edit", user];
                }
                if (user.ID == Guid.Empty)
                {
                    return Response.AsRedirect("/user/list");
                }
                if (_userService.ModifyUser(model))
                {
                    ViewBag.ErrorMsg = HtmlUtils.GetCharisma_Alert(Charisma_AlertType.success, "成功信息", "修改用户信息成功");
                }
                else
                {
                    ViewBag.ErrorMsg = HtmlUtils.GetCharisma_Alert(Charisma_AlertType.error, "错误信息", "未知错误,请联系管理员");
                }
                return View["User/Edit", user];
            };

            Get["/delete/{id}"] = x =>
            {
                var model = _userService.GetByAutoId((int)x.id);
                _userService.DeleteUser(model.ID);
                return Response.AsRedirect("/user/list");
            };

            Get["/editrole"] = x =>
            {
                Guid userId = new Guid(Request.Query.userId);
                dynamic SiteId = null;
                SiteId = !String.IsNullOrEmpty(Request.Query.siteId.ToString()) && Request.Query.siteId != null ? new Guid(Request.Query.siteId) : Guid.Empty;
                var usermodel = _userService.GetById(userId);
                ViewBag.UserName = usermodel.UserName;
                ViewBag.UserId = usermodel.ID;
                ViewBag.SiteId = SiteId;
                ViewBag.SiteList = _siteService.GetAllSite();

                List<Role> siteRoles = _roleService.GetAllBySiteId(SiteId);
                List<Role> rightRoles = _roleService.GetAllBySiteIdAndUserId(SiteId, userId);
                ViewBag.NoSystemRoles = (SiteId != Guid.Empty && siteRoles.Count == 0);
                var leftRoles = (from p in siteRoles where !rightRoles.Exists(r => r.ID == p.ID) select p).ToList();
                ViewBag.LeftRoles = leftRoles;
                ViewBag.RightRoles = rightRoles;
                return View["User/EditRole"];
            };

            Post["/saverole"] = x =>
            {
                var result = new NotyResult();
                Guid userId = new Guid(Request.Form.userId);
                dynamic SiteId = null;
                SiteId = !String.IsNullOrEmpty(Request.Form.siteId.ToString()) && Request.Form.siteId != null ? new Guid(Request.Form.siteId) : Guid.Empty;
                Guid[] ids = RequestResultUtil.GetIdsByGuid(Request.Form.ids);

                var list = (ids ?? new Guid[0]);
                if (SiteId == Guid.Empty)
                {
                    result.code = NotyType.warning.ToString();
                    result.msg = "你没有选择站点!";
                }
                else
                {
                    List<Role> rightRoles = _roleService.GetAllBySiteIdAndUserId(SiteId, userId);
                    bool changed = false;
                    bool success = false;

                    List<object> added = new List<object>();
                    List<object> removed = new List<object>();

                    // 处理加角色的情况
                    foreach (Guid roleId in list)
                    {
                        if (!rightRoles.Exists(r=>r.ID == roleId))
                        {
                            changed = true;
                            success = _userRoleMappingService.CreateUserRoleMapping(userId, roleId);
                            added.Add(new { userId = userId, siteId = SiteId, roleId = roleId });
                        }
                    }

                    // 处理减角色的情况
                    foreach (Role role in rightRoles)
                    {
                        if (!list.ToList().Exists(r=>r == role.ID))
                        {
                            changed = true;
                            success = _userRoleMappingService.DeleteByUserIdAndRoleId(userId, role.ID);
                            removed.Add(new { userId = userId, siteId = SiteId, roleId = role.ID });
                        }
                    }

                    if (!changed || (changed && success))
                    {
                        result.code = NotyType.success.ToString();
                        result.msg = "保存成功!";
                    }
                    else
                    {
                        result.code = NotyType.error.ToString();
                        result.msg = "保存失败!请联系管理员!";
                    }
                }
                //if (list.Length == 0)
                //{
                //    result.code = NotyType.warning.ToString();
                //    result.msg = "你没有选择!";
                //}
                //else
                //{
                //    result.code = NotyType.success.ToString();
                //    result.msg = "排序成功";
                //}
                //else
                //{
                //    result.code = NotyType.error.ToString();
                //    result.msg = "排序失败!请联系管理员!";
                //}
                return this.Response.AsJson<NotyResult>(result);
            };
        }