using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using LitJson; using ProtoCSStruct; using SimpleHttpServer; using Sog; namespace Operation { [MenuMapping(refc = typeof(OperationLog))] public static class Admin { [RequestMapping("当前账号菜单", PermissionCode.SELF_MENUS)] public static int OnSelectMenuHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { var token = query.GetValue("token"); var version = query.GetValue("version").Toint32(); var account = OperationServerUtils.GetAccount(token); var menus = AdminSvc.GetMenuList(account); jsonData["ret"] = 0; int oldVersion = version; JsonData data = new JsonData(); if (menus != null && menus.Count() > 0) { var list = menus.OrderBy(item => item.Order).ToList(); foreach (var menu in list) { var exist = Resolver.AllRequestList.Contains(menu.Url); if (menu.ParentId != 0 && !exist) { continue; } version = menu.Version; data.Add(menu.ToJson()); } } if (menus != null && (oldVersion == 0 || version != oldVersion) && menus.Any()) { jsonData["data"] = data; } if (version == 0) { version = 1; } jsonData["version"] = version; return 0; } [RequestMapping("菜单管理", PermissionCode.SYSTEM_MENUS, true)] public static int OnSelectAllMenuHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { var menus = AdminSvc.GetAllMenus(); jsonData["ret"] = 0; JsonData data = new JsonData(); var list = menus.OrderBy(item => item.Order).ToList(); foreach (var menu in list) { data.Add(menu.ToJson()); } jsonData["data"] = data; return 0; } [RequestMapping("角色管理", PermissionCode.SYSTEM_ROLE, true)] public static int OnSelectAllRoleHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { var roles = AdminSvc.GetAllRoles(); var menus = AdminSvc.GetAllMenus(); var permissions = AdminSvc.GetAllPermission(); jsonData["ret"] = 0; JsonData data = new JsonData(); foreach (var role in roles) { if (role.Name == AdminSvc.Administrator) { menus.ForEach(item => { role.Menus.Add(item.MenuId); item.subMenus.ForEach(sub => { role.Menus.Add(sub.MenuId); }); }); permissions.ForEach(item => { role.Permissions.Add(item.Id); item.SubPermissions.ForEach(sub => { role.Permissions.Add(sub.Id); }); }); } data.Add(role.ToJson()); } jsonData["data"] = data; return 0; } [RequestMapping("权限管理", PermissionCode.SYSTEM_PERMISSION, true)] public static int OnSelectAllPermissionHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { var permissios = AdminSvc.GetAllPermission(); jsonData["ret"] = 0; JsonData data = new JsonData(); foreach (var permissio in permissios) { data.Add(permissio.ToJson()); } jsonData["data"] = data; return 0; } [RequestMapping("账号管理", PermissionCode.SYSTEM_ACCOUNT_MANAGER, true)] public static int OnSelectAllAccountHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { var name = query.GetValue("name")??""; RepeatedFixedStructString128_10 data = new RepeatedFixedStructString128_10(); data.Add(name); HttpApiRootHandler.FillHttpApiDbReq2MessageTaskDistributor(httpApiCmd, httpContextId, ref data); rsp.IsWaitFor = true; return 0; } public static int DoSelectAllAccount(string httpApiCmd, SSHttpApiDbReq req, DBOperator dbOperator) { HttpRequestInfo m_request = null; LitJson.JsonData builder = new LitJson.JsonData(); try { var httpContextId = req.HttpContextId; builder["ret"] = 0; dbOperator.SelectAccount(builder,req.Data[0].ToString()); m_request = OperationServer.m_httpService.m_requestList.Find(f => f.Http.id == httpContextId); } catch (Exception ex) { } finally { if (m_request != null) { m_request.Http.httpResponse.ContentAsUTF8 = builder.ToJson(); m_request.ProcessEnd = true; } } return 0; } [RequestMapping("创建账号", PermissionCode.CREATE_ACCOUNT, toLog: true)] public static int OnCreateAccountHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { var account = query.GetValue("account")??""; var name = query.GetValue("name")??""; var password = query.GetValue("password")??""; var roles = query.GetValue("roles")??""; RepeatedFixedStructString128_10 data = new RepeatedFixedStructString128_10(); data.Add(account); data.Add(name); data.Add(password); data.Add(roles); HttpApiRootHandler.FillHttpApiDbReq2MessageTaskDistributor(httpApiCmd, httpContextId, ref data); rsp.IsWaitFor = true; return 0; } public static int OnRegisterAccountHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { var account = query.GetValue("account")??""; var name = query.GetValue("account")??""; var password = query.GetValue("password")??""; var roles = query.GetValue("roles")??""; RepeatedFixedStructString128_10 data = new RepeatedFixedStructString128_10(); data.Add(account); data.Add(name); data.Add(password); data.Add(roles); HttpApiRootHandler.FillHttpApiDbReq2MessageTaskDistributor(httpApiCmd, httpContextId, ref data); rsp.IsWaitFor = true; return 0; } public static int DoCreateAccount(string httpApiCmd, SSHttpApiDbReq req, DBOperator dbOperator) { HttpRequestInfo m_request = null; LitJson.JsonData builder = new LitJson.JsonData(); try { var httpContextId = req.HttpContextId; builder["ret"] = 0; dbOperator.CreateAccount(builder,req.Data[0].ToString(),req.Data[1].ToString(),req.Data[2].ToString()); if ((int)builder["ret"] == 0) { var role = req.Data[3].ToString(); var config = OperationServerUtils.GetServerConfig(); if(!config.isOnline) { //线下默认账号都管理员 if (string.IsNullOrEmpty(role)) { role = "1"; } } AdminSvc.UpdateAccountRole(req.Data[0].ToString(),role); } m_request = OperationServer.m_httpService.m_requestList.Find(f => f.Http.id == httpContextId); } catch (Exception ex) { } finally { if (m_request != null) { m_request.Http.httpResponse.ContentAsUTF8 = builder.ToJson(); m_request.ProcessEnd = true; } } return 0; } [RequestMapping("创建角色", PermissionCode.SYSTEM_CREATE_ROLE, toLog: true)] public static int OnCreateRoleHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { var name = query.GetValue("name"); if (name == null) { jsonData["ret"] = -1; jsonData["msg"] = "name is required"; } AdminSvc.CreateRole(name); return 0; } [RequestMapping("更新角色", PermissionCode.SYSTEM_CREATE_ROLE, toLog: true)] public static int OnUpdateRoleHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { var name = query.GetValue("name"); var id = query.GetValue("id").Toint32(); var menus = query.GetValue("menus"); var permissions = query.GetValue("permissions"); if (name == null) { jsonData["ret"] = -1; jsonData["msg"] = "name is required"; return -1; } AdminSvc.UpdateRole(id,name,menus,permissions); return 0; } [RequestMapping("删除角色", PermissionCode.DELETE_ROLE, toLog: true)] public static int OnDeleteRoleHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { var roleId = query.GetValue("roleId").Toint32(); var menus = query.GetValue("menus"); var permissions = query.GetValue("permissions"); if (roleId==0) { jsonData["ret"] = -1; jsonData["msg"] = "id is required"; return -1; } AdminSvc.DeleteRole(roleId); return 0; } [RequestMapping("更新账号角色", PermissionCode.UPDATE_ACCOUNT_ROLE, toLog: true)] public static int OnUpdateAccountRoleHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { var account = query.GetValue("account"); var roles = query.GetValue("roles"); RepeatedFixedStructString128_10 data = new RepeatedFixedStructString128_10(); data.Add(account); data.Add(roles); HttpApiRootHandler.FillHttpApiDbReq2MessageTaskDistributor(httpApiCmd, httpContextId, ref data); AdminSvc.UpdateAccountRole(account, roles); return 0; } [RequestMapping("主页", PermissionCode.INDEX, toLog: false)] public static int IndexHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { jsonData["ret"] = 0; //系统时间 jsonData["currentTime"] = OperationServerUtils.GetTimeSecond(); return 0; } [RequestMapping("api列表查询", PermissionCode.API_LIST, toLog: false, ignored: true)] public static int OnApiListHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId) { TraceLog.Trace("Admin.OnApiListHttpReq url {0} ,param count {1} ,httpContextId {2}", request.Url, query.Count, httpContextId); var json = new JsonData(); var list = new List(); list.Add("login");//无需对外的 list.Add("logout"); list.Add("register"); list.Add("install"); list.Add("server_api_list"); list.Add("check_token"); list.Add("auth"); list.Add("gate_push"); Resolver.Ignored.ForEach(item => { if (list.Contains(item.Key)) return; var api = new JsonData { ["api"] = item.Key, ["desc"] = item.Value }; json.Add(api); }); jsonData["data"] = json; return 0; } } }