public async Task <IActionResult> DeleteConfirmed(string id)
        {
            Logger.Trace($"[{nameof(DeleteConfirmed)}] 用户[{SignUser.SignName}]()删除出用户({id})");
            try
            {
                // 1. 权限验证
                if (!await RoleOrgPerManager.HasPermission <User>(SignUser.Id, Constants.USER_DELETE, id))
                {
                    Logger.Warn($"[{nameof(Edit)}] 用户[{SignUser.SignName}]({SignUser.Id})没有权限({Constants.USER_DELETE})");
                    ViewData["ErrMsg"] = "没有权限";
                    return(RedirectToAction(nameof(Index)));
                }
                // 2. 业务处理
                await UserManager.DeleteByUserId(SignUser.Id, id);

                // 删除成功 -跳转到用户列表
                return(RedirectToAction(nameof(Index)));
            }
            catch (Exception e)
            {
                Logger.Error($"[{nameof(DeleteConfirmed)}] 用户删除失败:\r\n" + e);
                // 跳转回删除界面 -需要在界面说明发生了错误 --不清楚routeValues式怎么匹配的需要了解一下
                return(RedirectToAction(nameof(Delete), new { id, errMsg = e.Message }));
            }
        }
        /// <summary>
        /// 列表 -跳转到列表界面
        /// </summary>
        /// <returns></returns>
        // GET: UserBaseJsons
        public async Task <IActionResult> Index(int pageIndex = 0, int pageSize = 10)
        {
            Logger.Trace($"[{nameof(Index)}] 用户[{SignUser.SignName}]({SignUser.Id})查询可见用户列表, 请求参数: pageIndex: {pageIndex}, pageSize: {pageSize}");
            ViewData[Constants.SIGNUSER] = SignUser;
            try
            {
                // 1. 权限验证 -在自己组织有没权限
                if (!await RoleOrgPerManager.HasPermission(SignUser.Id, Constants.USER_QUERY))
                {
                    Logger.Warn($"[{nameof(Index)}] 用户[{SignUser.SignName}]({SignUser.Id})没有权限({Constants.USER_QUERY})");
                    ModelState.AddModelError("All", "没有权限");
                    return(RedirectToAction(nameof(HomeController.Index), HomeController.Name));
                }
                // 2. 业务处理
                var users = await UserManager.FindByUserId(SignUser.Id);

                // 分页查询用户列表
                var data = users.AsQueryable().Page(pageIndex, pageSize).ToList();
                Logger.Trace($"[{nameof(Index)}] 响应数据:\r\n{JsonUtil.ToJson(data)}");
                return(View(data));
            }
            catch (Exception e)
            {
                Logger.Error($"[{nameof(Index)}] 服务器错误:\r\n{e.ToString()}");
                return(RedirectToAction(nameof(HomeController.Index), HomeController.Name));
            }
        }
        public async Task <IActionResult> Edit(string id, [Bind("Id,SignName,PassWord")] UserJson user)
        {
            Logger.Trace($"[{nameof(Edit)}] 用户[{SignUser.SignName}]({SignUser.Id})编辑用户({id}) 请求参数:\r\n" + JsonUtil.ToJson(user));
            // 0. 参数检查
            if (id != user.Id)
            {
                return(NotFound());
            }
            try
            {
                // 1. 权限验证
                if (!await RoleOrgPerManager.HasPermissionInSelfOrg(SignUser.Id, Constants.USER_UPDATE))
                {
                    Logger.Warn($"[{nameof(Edit)}] 没有权限");
                    ModelState.AddModelError("All", "没有权限");
                    return(RedirectToAction(nameof(Index)));
                }
                // 2. 业务处理
                await UserManager.Update(user);

                // 编辑成功 -跳转到用户列表
                return(RedirectToAction(nameof(Index)));
            }
            catch (Exception e)
            {
                Logger.Error($"[{nameof(Edit)}] 用户信息更新失败: " + e);
                if (!await UserManager.ExistById(user.Id))
                {
                    return(NotFound());
                }
                ModelState.AddModelError("All", "用户信息更新失败");
                return(View(user));
            }
        }
        /// <summary>
        /// MVC 编辑 -跳转到编辑界面
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        // GET: UserBaseJsons/Edit/5
        public async Task <IActionResult> Edit(string id)
        {
            Logger.Trace($"[{nameof(Edit)}] 请求参数: 用户ID({id})");
            if (id == null)
            {
                return(NotFound());
            }
            try
            {
                // 1. 权限验证
                if (!await RoleOrgPerManager.HasPermissionInSelfOrg(SignUser.Id, Constants.USER_UPDATE))
                {
                    Logger.Warn($"[{nameof(Edit)}] 没有权限");
                    ModelState.AddModelError("All", "没有权限");
                    return(RedirectToAction(nameof(Index)));
                }
                // 2. 业务处理
                var user = await UserManager.FindById(id).SingleOrDefaultAsync();

                Logger.Trace($"[{nameof(Edit)}] 响应数据:\r\n{JsonUtil.ToJson(user)}");
                if (user == null)
                {
                    Logger.Trace($"[{nameof(Edit)}] 进入编辑界面-用户不存在({id})");
                    return(NotFound());
                }
                return(View(Mapper.Map <UserJson>(user)));
            }
            catch (Exception e)
            {
                Logger.Error($"[{nameof(Edit)}] 服务器错误:\r\n{e}");
                return(RedirectToAction(nameof(Index)));
            }
        }
        /// <summary>
        /// [MVC] 跳转到用户新建界面
        /// 在组织(orgId)下创建用户
        /// </summary>
        /// <param name="orgId">组织ID</param>
        /// <returns></returns>
        // GET: UserBaseJsons/Create
        public async Task <IActionResult> Create(string orgId)
        {
            Logger.Trace($"[{nameof(Create)}] 用户[{SignUser.SignName}]({SignUser.Id})跳转到用户新建界面, 请求参数:{nameof(orgId)}({orgId})");
            try
            {
                // 1. 权限验证
                if (orgId == null)
                {
                    if (!await RoleOrgPerManager.HasPermissionInSelfOrg(SignUser.Id, Constants.USER_CREATE))
                    {
                        return(RedirectToAction(nameof(Index)));
                    }
                }
                else
                {
                    if (!await RoleOrgPerManager.HasPermission(SignUser.Id, Constants.USER_CREATE, orgId))
                    {
                        return(RedirectToAction(nameof(Index)));
                    }
                }
                // 查询有权限添加用户的组织
                var organizations = await RoleOrgPerManager.FindOrgByUserIdPerName(SignUser.Id, Constants.USER_CREATE);

                ViewData["OrgId"] = new SelectList(organizations, nameof(Organization.Id), nameof(Organization.Name), orgId);
                return(View());
            }
            catch (Exception e)
            {
                Logger.Error($"[{nameof(Details)}] 用户[{SignUser.SignName}]({SignUser.Id})跳转界面(在组织({orgId})下创建用户)失败, 服务器错误:\r\n{e}");
                ViewData["ErrMsg"] = e.Message;
                return(RedirectToAction(nameof(Index)));
            }
        }
        public async Task <IActionResult> Create(string orgId, UserJson userJson)
        {
            Logger.Trace($"[{nameof(Create)}] 用户[{SignUser.SignName}]({SignUser.Id})在组织({orgId??"本组织"})新增用户:\r\n{JsonUtil.ToJson(userJson)}");
            // 0. 检查参数
            if (string.IsNullOrWhiteSpace(userJson.SignName) || string.IsNullOrWhiteSpace(userJson.PassWord))
            {
                ModelState.AddModelError("All", "用户名或密码不能为空");
                return(View());
            }
            try
            {
                // 1. 权限检查 -这里创建用户是在自己公司创建 -指定公司创建需要UserOrg表
                if (!(await RoleOrgPerManager.HasPermissionForUser(SignUser.Id, Constants.USER_CREATE, SignUser.Id)))
                {
                    Logger.Warn($"[{nameof(Create)}] 用户[{SignUser.SignName}]({SignUser.Id})没有权限({Constants.USER_CREATE})操作用户({SignUser.Id})");
                    ModelState.AddModelError("All", "没有权限");
                    return(RedirectToAction(nameof(Index)));
                }
                if (await UserManager.ExistByName(userJson.SignName))
                {
                    ModelState.AddModelError("All", "创建的用户已经存在");
                    return(View(userJson));
                }
                // 2. 处理业务
                var user = await UserManager.CreateToOrgByUserId(SignUser.Id, userJson, orgId);

                if (user != null)
                {
                    return(RedirectToAction(nameof(Index)));
                }
                else
                {
                    ModelState.AddModelError("All", "新增失败");
                    return(View(userJson));
                }
            }
            catch (Exception e)
            {
                Logger.Error($"[{nameof(Details)}] 服务器错误:\r\n{e}");
                ModelState.AddModelError("All", e.Message);
                return(View(userJson));
            }
        }
        /// <summary>
        /// 详情 -跳转到详情界面
        /// </summary>
        /// <param name="id">用户ID</param>
        /// <returns></returns>
        // GET: UserBaseJsons/Details/5
        public async Task <IActionResult> Details(string id)
        {
            Logger.Trace($"[{nameof(Details)}] 查看用户详情 用户ID: {id}");
            // 0. 检查参数
            if (id == null)
            {
                return(NotFound());
            }
            try
            {
                // 1. 权限检查
                if (!(await RoleOrgPerManager.HasPermissionForUser(SignUser.Id, Constants.USER_QUERY, id)))
                {
                    Logger.Warn($"用户[{SignUser.SignName}]({SignUser.Id})没有权限({Constants.USER_QUERY})操作用户({id})");
                    ModelState.AddModelError("All", "没有权限");
                    return(RedirectToAction(nameof(Index)));
                }
                // 2. 业务处理
                var user = await UserManager.FindById(id).SingleOrDefaultAsync();

                Logger.Trace($"[{nameof(Details)}] 响应数据:\r\n{JsonUtil.ToJson(user)}");
                if (user == null)
                {
                    return(NotFound());
                }
                else
                {
                    // 再查询用户绑定的角色列表
                    ViewData[Constants.ROLES] = await RoleManager.FindByUserId(id);

                    ViewData[Constants.USERROLES] = await UserRoleManager.FindByUserId(id).ToListAsync();

                    return(View(user));
                }
            }
            catch (Exception e)
            {
                Logger.Error($"[{nameof(Details)}] 服务器错误:\r\n{e}");
                return(RedirectToAction(nameof(Index)));
            }
        }