public static async Task<string> GetSetInfo(string adminId, string set) { EntitySetType type; JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; if (Enum.TryParse<EntitySetType>(sobj["set"], out type)) { string filter = null; if (sobj.ContainsKey("setFilter")) filter = sobj["setFilter"]; switch (type) { case EntitySetType.User: { var p = await GetMaxPriority(adminId); UserServiceProxy svc = new UserServiceProxy(); var si = await svc.GetSetInfoAsync(Cntx, filter); RoleServiceProxy rsvc = new RoleServiceProxy(); var roles = await rsvc.QueryDatabaseAsync(Cntx, new RoleSet(), null); List<dynamic> rlist = new List<dynamic>(); foreach (var r in roles) { if (r.RolePriority <= p.Major) rlist.Add(new { id = r.ID, name = r.RoleName, path = r.DistinctString, op = true }); } JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters, roles = rlist.ToArray() }); return json; } } } return null; }
public async Task<string> GetSetInfo(string sourceId, string set) { JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; EntitySetType type; if (Enum.TryParse<EntitySetType>(sobj["set"], out type)) { string filter = null; if (sobj.ContainsKey("setFilter")) filter = sobj["setFilter"]; switch (type) { case EntitySetType.User: { UserServiceProxy svc = new UserServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return json; } case EntitySetType.Role: { RoleServiceProxy svc = new RoleServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return json; } } } return null; }
static public void AddUserAndRoles(string newStaffUserName) { var environmentParametersViewModel = new Thinkgate.Domain.Classes.EnvironmentParametersFactory(AppSettings.ConnectionStringName).GetEnvironmentParameters(); var clientId = environmentParametersViewModel.ClientId; var kenticoEnabled = environmentParametersViewModel.IsKenticoEnabledSite; if (kenticoEnabled) { SqlParameterCollection parmsUersInRoles = new SqlCommand().Parameters; parmsUersInRoles.AddWithValue("ApplicationName", AppSettings.ApplicationName); parmsUersInRoles.AddWithValue("UserName", newStaffUserName); var findRolesForUser = ThinkgateDataAccess.FetchDataTable(AppSettings.ConnectionString, Thinkgate.Base.Classes.Data.StoredProcedures.ASPNET_USERS_IN_ROLES_GET_ROLES_FOR_USER, System.Data.CommandType.StoredProcedure, parmsUersInRoles); var roleservice = new RoleServiceProxy(); var nameCalculator = new Thinkgate.Domain.Classes.KenticoNameCalculator(); for (int i = 0; i < findRolesForUser.Rows.Count; i++) { string newStaffRoleName = findRolesForUser.Rows[i]["RoleName"].ToString(); var kenticoUserName = nameCalculator.CalculateUserName(clientId, newStaffUserName); var kenticoRoleName = nameCalculator.CalculateSystemGroupName(clientId, AdminUserName, newStaffRoleName); var roleuser = new RoleUser(); roleuser.UserName = kenticoUserName; roleservice.AddUsersToRole(kenticoRoleName, EnumerableExtensions.SingleItemAsEnumerable<RoleUser>(roleuser)); } } }
public async Task UpdateAsync(TRole role) { var find = await findRoleAsync(role.Name); if (find == null || find.Item1 == null) { return; } Role r = find.Item1; int cnt = 0; if (r.RoleName != (role as Role).RoleName) { r.RoleName = (role as Role).RoleName; cnt++; } if (r.DisplayName != (role as Role).DisplayName) { r.DisplayName = (role as Role).DisplayName; cnt++; } if (cnt > 0) { CallContext cctx = _cctx.CreateCopy(); RoleServiceProxy rsvc = new RoleServiceProxy(); await rsvc.AddOrUpdateEntitiesAsync(cctx, new RoleSet(), new Role[] { r }); } }
public async Task <string[]> GetUsersInRoleAsync(string rolename) { CallContext cctx = _cctx.CreateCopy(); try { var find = await findRoleAsync(rolename); Role r = find != null ? find.Item1 : null; if (r == null) { return new string[] { } } ; RoleServiceProxy rsvc = new RoleServiceProxy(); var ra = await rsvc.LoadEntityHierarchyRecursAsync(cctx, r, 0, -1); //for a given role, the users in it also include the ones in all its child roles, recursively (see above), in addition to its own ... List <string> luns = new List <string>(); await _getUserInRoleAsync(cctx, ra, luns); return(luns.ToArray()); } finally { } }
private async Task <Tuple <Role, Role> > findRoleAsync(string rolename) { if (string.IsNullOrEmpty(rolename)) { return(null); } CallContext cctx = _cctx.CreateCopy(); string[] rolepath = rolename.Trim('.').Split('.'); RoleServiceProxy rsvc = new RoleServiceProxy(); QueryExpresion qexpr = new QueryExpresion(); qexpr.OrderTks = new List <QToken>(new QToken[] { new QToken { TkName = "RoleName" } }); qexpr.FilterTks = new List <QToken>(new QToken[] { new QToken { TkName = "ApplicationID" }, new QToken { TkName = "==" }, new QToken { TkName = "\"" + app.ID + "\"" }, new QToken { TkName = "&&" }, new QToken { TkName = "ParentID" }, new QToken { TkName = "is null" } }); var rrts = await rsvc.QueryDatabaseAsync(cctx, new RoleSet(), qexpr); Role last = null; foreach (var rr in rrts) { if (rr.RoleName == rolepath[0]) { if (rolepath.Length > 1) { var rtree = await rsvc.LoadEntityFullHierarchyRecursAsync(cctx, rr); last = rtree.DataBehind; var r = findMatch(rtree, rolepath, 1, ref last); return(new Tuple <Role, Role>(r, last)); } else { return(new Tuple <Role, Role>(rr, rr)); } } } return(null); }
public async Task CreateAsync(TRole role) { CallContext cctx = _cctx.CreateCopy(); RoleServiceProxy rsvc = new RoleServiceProxy(); try { Role last = null; string rolename = role.Name; var find = await findRoleAsync(rolename); if (find == null || find.Item1 == null) { int lev = -1; string[] rolepath = rolename.Trim('.').Split('.'); if (find != null && find.Item2 != null) { lev = 0; var x = find.Item2; while (x.UpperRef != null) { lev++; x = x.UpperRef; } } RoleSet rs = new RoleSet(); last = (find == null || find.Item2 == null) ? null : find.Item2; for (int i = lev + 1; i < rolepath.Length; i++) { Role r = new Role(); r.ApplicationID = app.ID; r.RoleName = rolepath[i]; r.DisplayName = rolepath[i]; r.Description = ""; r.ParentID = last == null ? default(int?) : last.ID; var _r = await rsvc.AddOrUpdateEntitiesAsync(cctx, rs, new Role[] { r }); r = _r.ChangedEntities[0].UpdatedItem; last = r; } role.UpdateInstance(last); } else { role.UpdateInstance(find.Item1); } } catch (Exception e) { if (WriteExceptionsToEventLog) { WriteToEventLog(e, "CreateRole"); } throw getException("cb5e100e5a9a3e7f6d1fd97512215283", "error", e); } finally { } }
public static string GetManagedRoles(string adminId, string set, string qexpr, string prevlast) { JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; EntitySetType type; if (Enum.TryParse <EntitySetType>(sobj["set"], out type)) { switch (type) { case EntitySetType.Role: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(Role)); var ser3 = new JavaScriptSerializer(); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; RoleServiceProxy svc = new RoleServiceProxy(); RoleSet _set = new RoleSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) { _set.SetFilter = sobj["setFilter"]; } Role _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as Role; } var result = svc.GetPageItems(Cntx, _set, _qexpr, _prevlast); var ar = new List <dynamic>(); string appId = ApplicationContext.App.ID; foreach (var e in result) { ar.Add(new { data = e }); } string json = ser3.Serialize(ar); return(json); } } } return(null); }
public static async Task <dynamic> CreateNewRole(string adminId, string name, int priority, int?pid) { var maxp = await MemberAdminContext.GetMaxPriority(adminId); if (maxp.Major < priority) { return new { ok = false, msg = string.Format(ResourceUtils.GetString("0452f93e5e52c7eae26c4fac7aa2d5d7", "Denined! Your role priority: {0} is less than the requested one."), maxp.Major), role = new { } } } ; RoleServiceProxy rsvc = new RoleServiceProxy(); if (pid != null) { var prole = await rsvc.LoadEntityByKeyAsync(Cntx, pid.Value); if (prole.RolePriority >= priority) { return new { ok = false, msg = string.Format(ResourceUtils.GetString("b1ac4f163f802b8cb0c9216a2845c96b", "Denined! The role priority: {0} is less than or equals to the one for the parent role."), priority), role = new { } } } ; } Role r = new Role { RoleName = name, RolePriority = priority, ApplicationID = ApplicationContext.App.ID, DisplayName = name, ParentID = pid }; var result = await rsvc.AddOrUpdateEntitiesAsync(Cntx, new RoleSet(), new Role[] { r }); if ((result.ChangedEntities[0].OpStatus & (int)EntityOpStatus.Added) > 0) { var rabs = new EntityAbs <Role>(result.ChangedEntities[0].UpdatedItem); rabs.ParentExists = pid != null; return(new { ok = true, msg = "", role = MakeJsonRole(rabs, maxp) }); } else { if ((result.ChangedEntities[0].OpStatus & (int)EntityOpStatus.Duplication) > 0) { return new { ok = false, msg = ResourceUtils.GetString("a1794e1f262706c9409389bcfcff7499", "An existing role with the same name exists!"), role = new { } } } ; else { return new { ok = false, msg = ResourceUtils.GetString("aa1d969415687af8bf4e3ba5e4e3bc14", "Add failed, try again?"), role = new { } } }; } }
private void SetDownloadedServiceProxies() { ApplicationRegistryService = new ApplicationRegistryServiceProxy(); ConfigurationService = new ConfigurationServiceProxy(); DiagnosticService = new DiagnosticServiceProxy(); LoggerService = new SystemLoggerServiceProxy(); UserRegistryService = new UserRegistryServiceProxy(); RoleService = new RoleServiceProxy(); AuthService = new OAuthServiceProxy(); ServiceRegistryService = new ServiceRegistryServiceProxy(); SystemLogReaderService = new SystemLogReaderServiceProxy(); AuthSettingsService = new OAuthSettingsServiceProxy(); ProxyAssemblyGeneratorService = new ProxyAssemblyGeneratorServiceProxy(); }
public async Task <string> GetSetInfo(string sourceId, string set) { JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; EntitySetType type; if (Enum.TryParse <EntitySetType>(sobj["set"], out type)) { string filter = null; if (sobj.ContainsKey("setFilter")) { filter = sobj["setFilter"]; } switch (type) { case EntitySetType.User: { UserServiceProxy svc = new UserServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return(json); } case EntitySetType.Role: { RoleServiceProxy svc = new RoleServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return(json); } case EntitySetType.MemberNotification: { MemberNotificationServiceProxy svc = new MemberNotificationServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return(json); } } } return(null); }
public static async Task <RoleSetRoots> LoadRoleSetRoots(string adminId) { RoleSetRoots rrs = new RoleSetRoots(); var maxp = await MemberAdminContext.GetMaxPriority(adminId); rrs.adminMaxLevel = maxp.Major; rrs.adminRoleIds = maxp.RoleIds; RoleServiceProxy svc = new RoleServiceProxy(); var roots = svc.LoadEntitySetRoots(Cntx); rrs.roots = new List <dynamic>(); foreach (var rr in roots) { rrs.roots.Add(MakeJsonRole(rr, maxp)); } return(rrs); }
public async Task <TRole> FindByIdAsync(string roleId) { CallContext cctx = _cctx.CreateCopy(); RoleServiceProxy rsvc = new RoleServiceProxy(); var r = await rsvc.LoadEntityByKeyAsync(cctx, int.Parse(roleId)); if (r == null) { return(null); } TRole role = new TRole(); role.UpdateInstance(r); role.Name = await rolePathAsync(r); return(role); }
public static async Task <List <dynamic> > LoadRoleChildren(string adminId, int pid) { var maxp = await MemberAdminContext.GetMaxPriority(adminId); RoleServiceProxy svc = new RoleServiceProxy(); var p = await svc.LoadEntityByKeyAsync(Cntx, pid); var childs = await svc.LoadEntityChildrenAsync(Cntx, new EntityAbs <Role>(p)); List <dynamic> jsrts = new List <dynamic>(); foreach (var cc in childs) { jsrts.Add(MakeJsonRole(cc, maxp)); } return(jsrts); }
public static async Task <dynamic> DeleteRole(string adminId, int id) { RoleServiceProxy rsvc = new RoleServiceProxy(); var r = await rsvc.LoadEntityByKeyAsync(Cntx, id); if (r == null) { return new { ok = false, msg = ResourceUtils.GetString("2dcb0c4ea3d378571beac6927e1a4a99", "The role is not found!") } } ; if (!r.CanBeDeleted) { return new { ok = false, msg = ResourceUtils.GetString("9c43a60a6e3a5c4addb0a6ed16d5e297", "The role is marked as non deletable at the application level!") } } ; var maxp = await MemberAdminContext.GetMaxPriority(adminId); if (maxp.Major < r.RolePriority) { return new { ok = false, msg = string.Format(ResourceUtils.GetString("0452f93e5e52c7eae26c4fac7aa2d5d7", "Denined! Your role priority: {0} is less than the requested one."), maxp.Major), role = new { } } } ; var childs = await rsvc.LoadEntityChildrenAsync(Cntx, new EntityAbs <Role>(r)); if (childs.Count() > 0) { return new { ok = false, msg = ResourceUtils.GetString("a28af96e82c950ba80f82bba8ad3e404", "The role has child roles, try to delete them before deleting this one.") } } ; if (!ThrowOnPopulatedRole) { await rsvc.DeleteEntitiesAsync(Cntx, new RoleSet(), new Role[] { r }); } else { var uirs = await rsvc.MaterializeAllUsersInRolesAsync(Cntx, r); if (uirs.Count() > 0) { return new { ok = false, msg = ResourceUtils.GetString("6de8c40a93b3d0c36fb4b5daa73d7db5", "Cannot delete a populated role.") } } ; } return(new { ok = true, msg = "" }); }
public async Task DeleteAsync(TRole role) { CallContext cctx = _cctx.CreateCopy(); RoleServiceProxy rsvc = new RoleServiceProxy(); try { string rolename = role.Name; var find = await findRoleAsync(rolename); Role r = find == null ? null : find.Item1; if (r != null) { if (!ThrowOnPopulatedRole) { rsvc.DeleteEntities(cctx, new RoleSet(), new Role[] { r }); } else { var rus = await GetUsersInRoleAsync(rolename); if (rus == null || rus.Length == 0) { rsvc.DeleteEntities(cctx, new RoleSet(), new Role[] { r }); } else { throw getException("6de8c40a93b3d0c36fb4b5daa73d7db5", "Cannot delete a populated role."); } } } } catch (Exception e) { if (WriteExceptionsToEventLog) { WriteToEventLog(e, "DeleteRole"); } throw getException("cb5e100e5a9a3e7f6d1fd97512215283", "error", e); } finally { } }
public async Task<string> GetNextSorterOps(string sourceId, string set, string sorters) { EntitySetType type; if (Enum.TryParse<EntitySetType>(set, out type)) { switch (type) { case EntitySetType.User: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(List<QToken>)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(TokenOptions)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(sorters); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _sorters = ser1.ReadObject(strm) as List<QToken>; UserServiceProxy svc = new UserServiceProxy(); var result = await svc.GetNextSorterOpsAsync(ApplicationContext.ClientContext, _sorters); strm = new System.IO.MemoryStream(); ser2.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return json; } case EntitySetType.Role: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(List<QToken>)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(TokenOptions)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(sorters); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _sorters = ser1.ReadObject(strm) as List<QToken>; RoleServiceProxy svc = new RoleServiceProxy(); var result = await svc.GetNextSorterOpsAsync(ApplicationContext.ClientContext, _sorters); strm = new System.IO.MemoryStream(); ser2.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return json; } } } return null; }
private async Task <string> rolePathAsync(Role r) { RoleServiceProxy rsvc = null; string rpath = r.RoleName; while (r.ParentID != null) { if (r.UpperRef == null) { if (rsvc == null) { rsvc = new RoleServiceProxy(); } r.UpperRef = await rsvc.MaterializeUpperRefAsync(_cctx.CreateCopy(), r); } rpath = r.UpperRef.RoleName + "." + rpath; r = r.UpperRef; } return(rpath); }
public static async Task <string> GetSetInfo(string adminId, string set) { EntitySetType type; JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; if (Enum.TryParse <EntitySetType>(sobj["set"], out type)) { string filter = null; if (sobj.ContainsKey("setFilter")) { filter = sobj["setFilter"]; } switch (type) { case EntitySetType.User: { var p = await GetMaxPriority(adminId); UserServiceProxy svc = new UserServiceProxy(); var si = await svc.GetSetInfoAsync(Cntx, filter); RoleServiceProxy rsvc = new RoleServiceProxy(); var roles = await rsvc.QueryDatabaseAsync(Cntx, new RoleSet(), null); List <dynamic> rlist = new List <dynamic>(); foreach (var r in roles) { if (r.RolePriority <= p.Major) { rlist.Add(new { id = r.ID, name = r.RoleName, path = r.DistinctString, op = true }); } } JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters, roles = rlist.ToArray() }); return(json); } } } return(null); }
public static async Task <dynamic> ListUsersInRole(string adminId, int id) { RoleServiceProxy rsvc = new RoleServiceProxy(); var r = await rsvc.LoadEntityByKeyAsync(Cntx, id); List <dynamic> users = new List <dynamic>(); if (r == null) { return new { ok = false, msg = ResourceUtils.GetString("2dcb0c4ea3d378571beac6927e1a4a99", "The role is not found!"), users = users } } ; var maxp = await MemberAdminContext.GetMaxPriority(adminId); var uirs = await rsvc.MaterializeAllUsersInRolesAsync(Cntx, r); UsersInRoleServiceProxy uirsvc = new UsersInRoleServiceProxy(); foreach (var uir in uirs) { uir.User_UserID = await uirsvc.MaterializeUser_UserIDAsync(Cntx, uir); uir.RoleRef = await uirsvc.MaterializeRoleRefAsync(Cntx, uir); var umax = await MemberAdminContext.GetMaxPriority(uir.User_UserID.ID); bool canOp = false; if (maxp.Major >= umax.Major) { canOp = maxp.Major > r.RolePriority || maxp.Major == r.RolePriority && maxp.Minor >= uir.SubPriority; } users.Add(new { id = uir.RoleRef.ID, uid = uir.User_UserID.ID, name = uir.RoleRef.RoleName, username = uir.User_UserID.Username, path = Utils.GetHtmlRolePath(uir.RoleRef.DistinctString), level = uir.SubPriority, op = canOp }); } return(new { ok = true, msg = "", users = users }); } }
public static async Task <dynamic> LoadRoomSummary(string hubId, string id) { UserGroupServiceProxy gsvc = new UserGroupServiceProxy(); var cntx = Cntx; string descr = await gsvc.LoadEntityGroupDescriptionAsync(cntx, id); MemberCallbackServiceProxy mcbsvc = new MemberCallbackServiceProxy(); var qexpr = getConnectedGroupMemberFilter(hubId, id); long cnt = await mcbsvc.QueryEntityCountAsync(cntx, new MemberCallbackSet(), qexpr); UserGroupMemberServiceProxy uigsvc = new UserGroupMemberServiceProxy(); qexpr = new QueryExpresion(); qexpr.OrderTks = new List <QToken>(new QToken[] { new QToken { TkName = "UserID" } }); qexpr.FilterTks = new List <QToken>(new QToken[] { new QToken { TkName = "UserGroupID == \"" + id + "\" && SubscribedTo is not null && SubscribedTo == true" } }); long scnt = await uigsvc.QueryEntityCountAsync(cntx, new UserGroupMemberSet(), qexpr); qexpr = new QueryExpresion(); qexpr.OrderTks = new List <QToken>(new QToken[] { new QToken { TkName = "Username" } }); qexpr.FilterTks = new List <QToken>(new QToken[] { new QToken { TkName = "UsersInRole_UserID.RoleRef.UserGroupAdminRole.GroupID == \"" + id + "\"" } }); UserServiceProxy usvc = new UserServiceProxy(); var admins = await usvc.QueryDatabaseAsync(cntx, new UserSet(), qexpr); List <dynamic> ladms = new List <dynamic>(); if (admins.Count() > 0) { RoleServiceProxy rsvc = new RoleServiceProxy(); foreach (var u in admins) { qexpr = new QueryExpresion(); qexpr.OrderTks = new List <QToken>(new QToken[] { new QToken { TkName = "ID" } }); qexpr.FilterTks = new List <QToken>(new QToken[] { new QToken { TkName = "UserGroupAdminRole.GroupID == \"" + id + "\" && UsersInRole.UserID == \"" + u.ID + "\"" } }); var role = (await rsvc.QueryDatabaseAsync(cntx, new RoleSet(), qexpr)).First(); ladms.Add(new { id = u.ID, name = u.Username, role = role.DisplayName }); } } dynamic r = new { descr = descr, active = cnt, subscribers = scnt, admins = ladms }; return(r); }
public static async Task<OperationResult> AddUserToRole(string adminId, string uid, int rid) { OperationResult OpResult = new OperationResult(); var maxp = await MemberAdminContext.GetMaxPriority(adminId); RoleServiceProxy rsvc = new RoleServiceProxy(); UserServiceProxy usvc = new UserServiceProxy(); var cntx = Cntx; var u = await usvc.LoadEntityByKeyAsync(cntx, uid); if (u == null) { OpResult.Result = new { ok = false, msg = string.Format(ResourceUtils.GetString("b66098049404e4de1356242e8aa6444a", "User \"{0}\" is not found."), uid) }; return OpResult; } var uroles = await usvc.MaterializeAllRolesAsync(cntx, u); if (DBAutoCleanupRoles) { // prevent polution List<Role> higherroles = new List<Role>(); foreach (var ur in uroles) { var pr = ur; if (pr.ID == rid) higherroles.Add(ur); while (pr.ParentID != null) { pr.UpperRef = await rsvc.MaterializeUpperRefAsync(cntx, pr); pr = pr.UpperRef; if (pr.ID == rid) { higherroles.Add(ur); break; } } } if (higherroles.Count > 0) { string rolesstr = ""; foreach (var hr in higherroles) rolesstr += (rolesstr == "" ? "" : ", ") + hr.DistinctString; string errorfmt = ResourceUtils.GetString("43558b5deaec392b9461d28d4e753687", "Operation denied: the user already has this or more specific roles: '{0}'! Try to remove them before adding present one."); OpResult.Result = new { ok = false, msg = string.Format(errorfmt, rolesstr) }; return OpResult; } } var r = await rsvc.LoadEntityByKeyAsync(cntx, rid); if (r == null) { OpResult.Result = new { ok = false, msg = ResourceUtils.GetString("db2a3d7bc44d36a9ebeaa0d562c4cd21", "The role is not found.") }; return OpResult; } else if (r.RolePriority > maxp.Major) { OpResult.Result = new { ok = false, msg = ResourceUtils.GetString("67729f0f407d1ea57f28b43235b3e5f6", "Adding more priviledged role is not authorized.") }; return OpResult; } List<SimpleMessage> notices = new List<SimpleMessage>(); var uir = new UsersInRole(); List<Role> removed = new List<Role>(); if (DBAutoCleanupRoles) { // clean up: find more general roles to remove. var p = r; while (p.ParentID != null) { p.UpperRef = await rsvc.MaterializeUpperRefAsync(cntx, p); p = p.UpperRef; foreach (var ur in uroles) { if (ur.ID == p.ID) { if (!(from d in removed where d.ID == p.ID select d).Any()) removed.Add(p); } } } } uir.IsPersisted = false; uir.UserID = u.ID; uir.RoleID = rid; uir.SubPriority = 0; uir.AssignDate = DateTime.UtcNow; uir.LastModified = uir.AssignDate; uir.AdminID = adminId; UsersInRoleServiceProxy uirsvc = new UsersInRoleServiceProxy(); await uirsvc.AddOrUpdateEntitiesAsync(cntx, new UsersInRoleSet(), new UsersInRole[] { uir }); UserAppMemberServiceProxy mbsvc = new UserAppMemberServiceProxy(); var memb = await mbsvc.LoadEntityByKeyAsync(cntx, AppId, uid); notices.Add(new SimpleMessage { TypeId = 1, Title = string.Format(ResourceUtils.GetString("38015f8af3e032dfd803758dd2bde917", "New role: [{0}] is added.", memb.AcceptLanguages), r.DistinctString), Data = "{ id=\"" + r.ID + "\", type=\"role\", name=\"" + r.DistinctString + "\" }" }); var _r = new { id = rid, uid = u.ID, name = r.RoleName, path = r.DistinctString, level = uir.SubPriority, op = true }; List<dynamic> _removed = new List<dynamic>(); if (removed.Count > 0) { List<UsersInRole> l = new List<UsersInRole>(); foreach (var rmv in removed) { var x = uirsvc.LoadEntityByKey(Cntx, rmv.ID, u.ID); l.Add(x); _removed.Add(new { id = rmv.ID, name = rmv.RoleName, path = rmv.DistinctString, op = maxp.Major >= rmv.RolePriority }); } await uirsvc.DeleteEntitiesAsync(Cntx, new UsersInRoleSet(), l.ToArray()); foreach (var _rrmv in removed) notices.Add(new SimpleMessage { TypeId = 1, Title = string.Format(ResourceUtils.GetString("9708d527fbbf0d9752fc2c741615fb58", "Your role: [{0}] is removed.", memb.AcceptLanguages), _rrmv.DistinctString), Data = "{ id=\"" + _rrmv.ID + "\", type=\"role\", name=\"" + _rrmv.DistinctString + "\" }" }); } await AddUserRoleHistory(uir, UserRoleOperations.Added); OpResult.Result = new { ok = true, msg = "", added = _r, removed = _removed.ToArray() }; OpResult.notices = notices.ToArray(); return OpResult; }
public static async Task<dynamic> ListUsersInRole(string adminId, int id) { RoleServiceProxy rsvc = new RoleServiceProxy(); var r = await rsvc.LoadEntityByKeyAsync(Cntx, id); List<dynamic> users = new List<dynamic>(); if (r == null) return new { ok = false, msg = ResourceUtils.GetString("2dcb0c4ea3d378571beac6927e1a4a99", "The role is not found!"), users = users }; var maxp = await MemberAdminContext.GetMaxPriority(adminId); var uirs = await rsvc.MaterializeAllUsersInRolesAsync(Cntx, r); UsersInRoleServiceProxy uirsvc = new UsersInRoleServiceProxy(); foreach (var uir in uirs) { uir.User_UserID = await uirsvc.MaterializeUser_UserIDAsync(Cntx, uir); uir.RoleRef = await uirsvc.MaterializeRoleRefAsync(Cntx, uir); var umax = await MemberAdminContext.GetMaxPriority(uir.User_UserID.ID); bool canOp = false; if (maxp.Major >= umax.Major) canOp = maxp.Major > r.RolePriority || maxp.Major == r.RolePriority && maxp.Minor >= uir.SubPriority; users.Add(new { id = uir.RoleRef.ID, uid = uir.User_UserID.ID, name = uir.RoleRef.RoleName, username = uir.User_UserID.Username, path = Utils.GetHtmlRolePath(uir.RoleRef.DistinctString), level = uir.SubPriority, op = canOp }); } return new { ok = true, msg = "", users = users }; }
public static async Task<dynamic> DeleteRole(string adminId, int id) { RoleServiceProxy rsvc = new RoleServiceProxy(); var r = await rsvc.LoadEntityByKeyAsync(Cntx, id); if (r == null) return new { ok = false, msg = ResourceUtils.GetString("2dcb0c4ea3d378571beac6927e1a4a99", "The role is not found!") }; if (!r.CanBeDeleted) return new { ok = false, msg = ResourceUtils.GetString("9c43a60a6e3a5c4addb0a6ed16d5e297", "The role is marked as non deletable at the application level!") }; var maxp = await MemberAdminContext.GetMaxPriority(adminId); if (maxp.Major < r.RolePriority) return new { ok = false, msg = string.Format(ResourceUtils.GetString("0452f93e5e52c7eae26c4fac7aa2d5d7", "Denined! Your role priority: {0} is less than the requested one."), maxp.Major), role = new { } }; var childs = await rsvc.LoadEntityChildrenAsync(Cntx, new EntityAbs<Role>(r)); if (childs.Count() > 0) return new { ok = false, msg = ResourceUtils.GetString("a28af96e82c950ba80f82bba8ad3e404", "The role has child roles, try to delete them before deleting this one.") }; if (!ThrowOnPopulatedRole) await rsvc.DeleteEntitiesAsync(Cntx, new RoleSet(), new Role[] { r }); else { var uirs = await rsvc.MaterializeAllUsersInRolesAsync(Cntx, r); if (uirs.Count() > 0) return new { ok = false, msg = ResourceUtils.GetString("6de8c40a93b3d0c36fb4b5daa73d7db5", "Cannot delete a populated role.") }; } return new { ok = true, msg = "" }; }
public async Task<string> NextPageBlock(string sourceId, string set, string qexpr, string prevlast) { JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; EntitySetType type; if (Enum.TryParse<EntitySetType>(sobj["set"], out type)) { switch (type) { case EntitySetType.User: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(User)); DataContractJsonSerializer ser3 = new DataContractJsonSerializer(typeof(UserPageBlock)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; UserServiceProxy svc = new UserServiceProxy(); UserSet _set = new UserSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) _set.SetFilter = sobj["setFilter"]; User _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as User; } var result = await svc.NextPageBlockAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); strm = new System.IO.MemoryStream(); ser3.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return json; } case EntitySetType.Role: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(Role)); DataContractJsonSerializer ser3 = new DataContractJsonSerializer(typeof(RolePageBlock)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; RoleServiceProxy svc = new RoleServiceProxy(); RoleSet _set = new RoleSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) _set.SetFilter = sobj["setFilter"]; Role _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as Role; } var result = await svc.NextPageBlockAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); strm = new System.IO.MemoryStream(); ser3.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return json; } case EntitySetType.MemberNotification: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(MemberNotification)); DataContractJsonSerializer ser3 = new DataContractJsonSerializer(typeof(MemberNotificationPageBlock)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; MemberNotificationServiceProxy svc = new MemberNotificationServiceProxy(); MemberNotificationSet _set = new MemberNotificationSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) _set.SetFilter = sobj["setFilter"]; MemberNotification _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as MemberNotification; } var result = await svc.NextPageBlockAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); strm = new System.IO.MemoryStream(); ser3.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return json; } case EntitySetType.ShortMessage: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(ShortMessage)); DataContractJsonSerializer ser3 = new DataContractJsonSerializer(typeof(ShortMessagePageBlock)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; var svc = new ShortMessageServiceProxy(); var _set = new ShortMessageSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (!sobj.ContainsKey("setFilter")) throw new Exception("The page is not properly parameterized!"); else { Func<string, string, int> count = (s, p) => { int _cnt = 0; int i = 0; while ((i = s.IndexOf(p, i)) != -1) { _cnt++; i += p.Length; } return _cnt; }; string filter = sobj["setFilter"]; if (filter.Contains("ToID is null") && filter.Contains("___usergroups___") && count(filter, "||") == 0) { string[] mbgrpIds = await GroupChatViewContext.UserGroupChatMembers(System.Web.HttpContext.Current.User.Identity.GetUserId()); if (mbgrpIds == null || mbgrpIds.Length == 0) throw new Exception(ResourceUtils.GetString("234038e6185f013e25d0213c06f5a0e9", "You are not a member of any chat group.")); string groupexpr = ""; foreach (var gid in mbgrpIds) groupexpr += (groupexpr != "" ? " || " : "") + "GroupID == \"" + gid + "\""; _set.SetFilter = filter.Replace("___usergroups___", groupexpr); } else if (filter.EndsWith("&& ToID is not null && GroupID is null && ( ToID == \"{0}\" || FromID == \"{0}\" )") && count(filter, "||") == 1) { filter = string.Format(filter, System.Web.HttpContext.Current.User.Identity.GetUserId()); _set.SetFilter = filter; } else throw new Exception("The page is not properly parameterized!"); } ShortMessage _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as ShortMessage; } var result = await svc.NextPageBlockAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); strm = new System.IO.MemoryStream(); ser3.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return json; } } } return null; }
public async Task<string> GetNextFilterOps(string sourceId, string set, string qexpr) { EntitySetType type; if (Enum.TryParse<EntitySetType>(set, out type)) { switch (type) { case EntitySetType.User: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(TokenOptions)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; UserServiceProxy svc = new UserServiceProxy(); var result = await svc.GetNextFilterOpsAsync(ApplicationContext.ClientContext, _qexpr, ""); strm = new System.IO.MemoryStream(); ser2.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return json; } case EntitySetType.Role: { var ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); var ser2 = new DataContractJsonSerializer(typeof(TokenOptions)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; RoleServiceProxy svc = new RoleServiceProxy(); var result = await svc.GetNextFilterOpsAsync(ApplicationContext.ClientContext, _qexpr, ""); strm = new System.IO.MemoryStream(); ser2.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return json; } case EntitySetType.MemberNotification: { var ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); var ser2 = new DataContractJsonSerializer(typeof(TokenOptions)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; MemberNotificationServiceProxy svc = new MemberNotificationServiceProxy(); var result = await svc.GetNextFilterOpsAsync(ApplicationContext.ClientContext, _qexpr, ""); strm = new System.IO.MemoryStream(); ser2.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return json; } case EntitySetType.ShortMessage: { var ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); var ser2 = new DataContractJsonSerializer(typeof(TokenOptions)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; var svc = new ShortMessageServiceProxy(); var result = await svc.GetNextFilterOpsAsync(ApplicationContext.ClientContext, _qexpr, ""); strm = new System.IO.MemoryStream(); ser2.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return json; } } } return null; }
public async Task <string> NextPageBlock(string sourceId, string set, string qexpr, string prevlast) { JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; EntitySetType type; if (Enum.TryParse <EntitySetType>(sobj["set"], out type)) { switch (type) { case EntitySetType.User: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(User)); DataContractJsonSerializer ser3 = new DataContractJsonSerializer(typeof(UserPageBlock)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; UserServiceProxy svc = new UserServiceProxy(); UserSet _set = new UserSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) { _set.SetFilter = sobj["setFilter"]; } User _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as User; } var result = await svc.NextPageBlockAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); strm = new System.IO.MemoryStream(); ser3.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return(json); } case EntitySetType.Role: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(Role)); DataContractJsonSerializer ser3 = new DataContractJsonSerializer(typeof(RolePageBlock)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; RoleServiceProxy svc = new RoleServiceProxy(); RoleSet _set = new RoleSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) { _set.SetFilter = sobj["setFilter"]; } Role _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as Role; } var result = await svc.NextPageBlockAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); strm = new System.IO.MemoryStream(); ser3.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return(json); } case EntitySetType.MemberNotification: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(MemberNotification)); DataContractJsonSerializer ser3 = new DataContractJsonSerializer(typeof(MemberNotificationPageBlock)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; MemberNotificationServiceProxy svc = new MemberNotificationServiceProxy(); MemberNotificationSet _set = new MemberNotificationSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) { _set.SetFilter = sobj["setFilter"]; } MemberNotification _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as MemberNotification; } var result = await svc.NextPageBlockAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); strm = new System.IO.MemoryStream(); ser3.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return(json); } case EntitySetType.ShortMessage: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(ShortMessage)); DataContractJsonSerializer ser3 = new DataContractJsonSerializer(typeof(ShortMessagePageBlock)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; var svc = new ShortMessageServiceProxy(); var _set = new ShortMessageSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (!sobj.ContainsKey("setFilter")) { throw new Exception("The page is not properly parameterized!"); } else { Func <string, string, int> count = (s, p) => { int _cnt = 0; int i = 0; while ((i = s.IndexOf(p, i)) != -1) { _cnt++; i += p.Length; } return(_cnt); }; string filter = sobj["setFilter"]; if (filter.Contains("ToID is null") && filter.Contains("___usergroups___") && count(filter, "||") == 0) { string[] mbgrpIds = await GroupChatViewContext.UserGroupChatMembers(System.Web.HttpContext.Current.User.Identity.GetUserId()); if (mbgrpIds == null || mbgrpIds.Length == 0) { throw new Exception(ResourceUtils.GetString("234038e6185f013e25d0213c06f5a0e9", "You are not a member of any chat group.")); } string groupexpr = ""; foreach (var gid in mbgrpIds) { groupexpr += (groupexpr != "" ? " || " : "") + "GroupID == \"" + gid + "\""; } _set.SetFilter = filter.Replace("___usergroups___", groupexpr); } else if (filter.EndsWith("&& ToID is not null && GroupID is null && ( ToID == \"{0}\" || FromID == \"{0}\" )") && count(filter, "||") == 1) { filter = string.Format(filter, System.Web.HttpContext.Current.User.Identity.GetUserId()); _set.SetFilter = filter; } else { throw new Exception("The page is not properly parameterized!"); } } ShortMessage _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as ShortMessage; } var result = await svc.NextPageBlockAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); strm = new System.IO.MemoryStream(); ser3.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return(json); } } } return(null); }
public static async Task<RoleSetRoots> LoadRoleSetRoots(string adminId) { RoleSetRoots rrs = new RoleSetRoots(); var maxp = await MemberAdminContext.GetMaxPriority(adminId); rrs.adminMaxLevel = maxp.Major; rrs.adminRoleIds = maxp.RoleIds; RoleServiceProxy svc = new RoleServiceProxy(); var roots = svc.LoadEntitySetRoots(Cntx); rrs.roots = new List<dynamic>(); foreach (var rr in roots) rrs.roots.Add(MakeJsonRole(rr, maxp)); return rrs; }
public static async Task<string> GetManagedUsers(string adminId, string set, string qexpr, string prevlast) { var maxp = await GetMaxPriority(adminId); JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; EntitySetType type; if (Enum.TryParse<EntitySetType>(sobj["set"], out type)) { switch (type) { case EntitySetType.User: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(User)); var ser3 = new JavaScriptSerializer(); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; UserServiceProxy svc = new UserServiceProxy(); UserSet _set = new UserSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) _set.SetFilter = sobj["setFilter"]; User _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as User; } RoleServiceProxy rsvc = new RoleServiceProxy(); var roles = await rsvc.QueryDatabaseAsync(Cntx, new RoleSet(), null); var result = await svc.GetPageItemsAsync(Cntx, _set, _qexpr, _prevlast); var ar = new List<dynamic>(); string appId = ApplicationContext.App.ID; UsersInRoleServiceProxy uirsvc = new UsersInRoleServiceProxy(); foreach (var e in result) { List<Role> rlist = new List<Role>(); foreach (var r in roles) { if (r.RolePriority <= maxp.Major) rlist.Add(r); } var p = await GetMaxPriority(e); List<dynamic> rolelist = new List<dynamic>(); var _roles = await svc.MaterializeAllUsersInRole_UserIDsAsync(Cntx, e); dynamic _max = null; if (_roles != null) { List<UsersInRole> _rlist = new List<UsersInRole>(); foreach (var ir in _roles) { ir.RoleRef = uirsvc.MaterializeRoleRef(Cntx, ir); _rlist.Add(ir); } foreach (var ir in from d in _rlist orderby d.RoleRef.RolePriority descending, d.SubPriority descending select d) { bool op = adminId != e.ID && (ir.RoleRef.RolePriority < maxp.Major || ir.RoleRef.RolePriority == maxp.Major && ir.SubPriority <= maxp.Minor); var _r = new { id = ir.RoleRef.ID, uid = ir.UserID, name = ir.RoleRef.RoleName, path = Utils.GetHtmlRolePath(ir.RoleRef.DistinctString), level = ir.SubPriority, op = op }; if (ir.RoleRef.ID == p.MaxRole.ID) _max = _r; rolelist.Add(_r); int ptr = -1; for (int i = 0; i < rlist.Count; i++) { if (rlist[i].ID == ir.RoleRef.ID) { ptr = i; break; } } if (ptr != -1) rlist.RemoveAt(ptr); } } List<dynamic> availablers = new List<dynamic>(); //if (adminId != e.ID) { foreach (var r in rlist) availablers.Add(new { id = r.ID, name = r.RoleName, path = Utils.GetHtmlRolePath(r.DistinctString), op = true }); } var membs = svc.MaterializeAllUserAppMembers(Cntx, e); ar.Add(new { data = e, member = (from d in membs where d.ApplicationID == appId select d).SingleOrDefault(), roles = rolelist.ToArray(), maxrole = _max, availableRoles = availablers.ToArray(), CanEdit = p.IsLowerOrEqual(maxp) }); } string json = ser3.Serialize(ar); return json; } } } return null; }
public static async Task <dynamic> UpdateRole(string adminId, int id, int priority, int?pid) { var maxp = await MemberAdminContext.GetMaxPriority(adminId); if (maxp.Major < priority) { return new { ok = false, msg = string.Format(ResourceUtils.GetString("0452f93e5e52c7eae26c4fac7aa2d5d7", "Denined! Your role priority: {0} is less than the requested one."), maxp.Major), role = new { } } } ; RoleServiceProxy rsvc = new RoleServiceProxy(); if (pid != null) { var prole = await rsvc.LoadEntityByKeyAsync(Cntx, pid.Value); if (prole.RolePriority >= priority) { return new { ok = false, msg = string.Format(ResourceUtils.GetString("b1ac4f163f802b8cb0c9216a2845c96b", "Denined! The role priority: {0} is less than or equals to the one for the parent role."), priority), role = new { } } } ; } var r = await rsvc.LoadEntityByKeyAsync(Cntx, id); if (r == null) { return new { ok = false, msg = ResourceUtils.GetString("2dcb0c4ea3d378571beac6927e1a4a99", "The role is not found!") } } ; if (r.RolePriority == priority) { return new { ok = true, msg = "" } } ; var _r = await rsvc.LoadEntityHierarchyRecursAsync(Cntx, r, 0, -1); if (_r.ChildEntities != null) { if (!checkRolePrior(priority, _r.ChildEntities)) { return new { ok = false, msg = string.Format(ResourceUtils.GetString("680d7ee4f668b8eac69d8153e3e25293", "The attempted role priority: {0} is greater than or equals to one of child role priorities."), priority) } } ; } r.RolePriority = priority; var result = await rsvc.AddOrUpdateEntitiesAsync(Cntx, new RoleSet(), new Role[] { r }); if ((result.ChangedEntities[0].OpStatus & (int)EntityOpStatus.Updated) > 0) { var rabs = new EntityAbs <Role>(result.ChangedEntities[0].UpdatedItem); rabs.ParentExists = pid != null; return(new { ok = true, msg = "" }); } else { if ((result.ChangedEntities[0].OpStatus & (int)EntityOpStatus.Duplication) > 0) { return new { ok = false, msg = ResourceUtils.GetString("a1794e1f262706c9409389bcfcff7499", "An existing role with the same name exists!"), role = new { } } } ; else { return new { ok = false, msg = ResourceUtils.GetString("a91c35ceb071295cf0c07ef4acc9424e", "Update failed, try again?") } }; } }
public static string GetManagedRoles(string adminId, string set, string qexpr, string prevlast) { JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; EntitySetType type; if (Enum.TryParse<EntitySetType>(sobj["set"], out type)) { switch (type) { case EntitySetType.Role: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(Role)); var ser3 = new JavaScriptSerializer(); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; RoleServiceProxy svc = new RoleServiceProxy(); RoleSet _set = new RoleSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) _set.SetFilter = sobj["setFilter"]; Role _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as Role; } var result = svc.GetPageItems(Cntx, _set, _qexpr, _prevlast); var ar = new List<dynamic>(); string appId = ApplicationContext.App.ID; foreach (var e in result) { ar.Add(new { data = e }); } string json = ser3.Serialize(ar); return json; } } } return null; }
public static async Task <OperationResult> AddUserToRole(string adminId, string uid, int rid) { OperationResult OpResult = new OperationResult(); var maxp = await MemberAdminContext.GetMaxPriority(adminId); RoleServiceProxy rsvc = new RoleServiceProxy(); UserServiceProxy usvc = new UserServiceProxy(); var cntx = Cntx; var u = await usvc.LoadEntityByKeyAsync(cntx, uid); if (u == null) { OpResult.Result = new { ok = false, msg = string.Format(ResourceUtils.GetString("b66098049404e4de1356242e8aa6444a", "User \"{0}\" is not found."), uid) }; return(OpResult); } var uroles = await usvc.MaterializeAllRolesAsync(cntx, u); if (DBAutoCleanupRoles) { // prevent polution List <Role> higherroles = new List <Role>(); foreach (var ur in uroles) { var pr = ur; if (pr.ID == rid) { higherroles.Add(ur); } while (pr.ParentID != null) { pr.UpperRef = await rsvc.MaterializeUpperRefAsync(cntx, pr); pr = pr.UpperRef; if (pr.ID == rid) { higherroles.Add(ur); break; } } } if (higherroles.Count > 0) { string rolesstr = ""; foreach (var hr in higherroles) { rolesstr += (rolesstr == "" ? "" : ", ") + hr.DistinctString; } string errorfmt = ResourceUtils.GetString("43558b5deaec392b9461d28d4e753687", "Operation denied: the user already has this or more specific roles: '{0}'! Try to remove them before adding present one."); OpResult.Result = new { ok = false, msg = string.Format(errorfmt, rolesstr) }; return(OpResult); } } var r = await rsvc.LoadEntityByKeyAsync(cntx, rid); if (r == null) { OpResult.Result = new { ok = false, msg = ResourceUtils.GetString("db2a3d7bc44d36a9ebeaa0d562c4cd21", "The role is not found.") }; return(OpResult); } else if (r.RolePriority > maxp.Major) { OpResult.Result = new { ok = false, msg = ResourceUtils.GetString("67729f0f407d1ea57f28b43235b3e5f6", "Adding more priviledged role is not authorized.") }; return(OpResult); } List <SimpleMessage> notices = new List <SimpleMessage>(); var uir = new UsersInRole(); List <Role> removed = new List <Role>(); if (DBAutoCleanupRoles) { // clean up: find more general roles to remove. var p = r; while (p.ParentID != null) { p.UpperRef = await rsvc.MaterializeUpperRefAsync(cntx, p); p = p.UpperRef; foreach (var ur in uroles) { if (ur.ID == p.ID) { if (!(from d in removed where d.ID == p.ID select d).Any()) { removed.Add(p); } } } } } uir.IsPersisted = false; uir.UserID = u.ID; uir.RoleID = rid; uir.SubPriority = 0; uir.AssignDate = DateTime.UtcNow; uir.LastModified = uir.AssignDate; uir.AdminID = adminId; UsersInRoleServiceProxy uirsvc = new UsersInRoleServiceProxy(); await uirsvc.AddOrUpdateEntitiesAsync(cntx, new UsersInRoleSet(), new UsersInRole[] { uir }); UserAppMemberServiceProxy mbsvc = new UserAppMemberServiceProxy(); var memb = await mbsvc.LoadEntityByKeyAsync(cntx, AppId, uid); notices.Add(new SimpleMessage { TypeId = 1, Title = string.Format(ResourceUtils.GetString("38015f8af3e032dfd803758dd2bde917", "New role: [{0}] is added.", memb.AcceptLanguages), r.DistinctString), Data = "{ id=\"" + r.ID + "\", type=\"role\", name=\"" + r.DistinctString + "\" }" }); var _r = new { id = rid, uid = u.ID, name = r.RoleName, path = r.DistinctString, level = uir.SubPriority, op = true }; List <dynamic> _removed = new List <dynamic>(); if (removed.Count > 0) { List <UsersInRole> l = new List <UsersInRole>(); foreach (var rmv in removed) { var x = uirsvc.LoadEntityByKey(Cntx, rmv.ID, u.ID); l.Add(x); _removed.Add(new { id = rmv.ID, name = rmv.RoleName, path = rmv.DistinctString, op = maxp.Major >= rmv.RolePriority }); } await uirsvc.DeleteEntitiesAsync(Cntx, new UsersInRoleSet(), l.ToArray()); foreach (var _rrmv in removed) { notices.Add(new SimpleMessage { TypeId = 1, Title = string.Format(ResourceUtils.GetString("9708d527fbbf0d9752fc2c741615fb58", "Your role: [{0}] is removed.", memb.AcceptLanguages), _rrmv.DistinctString), Data = "{ id=\"" + _rrmv.ID + "\", type=\"role\", name=\"" + _rrmv.DistinctString + "\" }" }); } } await AddUserRoleHistory(uir, UserRoleOperations.Added); OpResult.Result = new { ok = true, msg = "", added = _r, removed = _removed.ToArray() }; OpResult.notices = notices.ToArray(); return(OpResult); }
public async Task <string> GetNextFilterOps(string sourceId, string set, string qexpr) { EntitySetType type; if (Enum.TryParse <EntitySetType>(set, out type)) { switch (type) { case EntitySetType.User: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(TokenOptions)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; UserServiceProxy svc = new UserServiceProxy(); var result = await svc.GetNextFilterOpsAsync(ApplicationContext.ClientContext, _qexpr, ""); strm = new System.IO.MemoryStream(); ser2.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return(json); } case EntitySetType.Role: { var ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); var ser2 = new DataContractJsonSerializer(typeof(TokenOptions)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; RoleServiceProxy svc = new RoleServiceProxy(); var result = await svc.GetNextFilterOpsAsync(ApplicationContext.ClientContext, _qexpr, ""); strm = new System.IO.MemoryStream(); ser2.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return(json); } case EntitySetType.MemberNotification: { var ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); var ser2 = new DataContractJsonSerializer(typeof(TokenOptions)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; MemberNotificationServiceProxy svc = new MemberNotificationServiceProxy(); var result = await svc.GetNextFilterOpsAsync(ApplicationContext.ClientContext, _qexpr, ""); strm = new System.IO.MemoryStream(); ser2.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return(json); } case EntitySetType.ShortMessage: { var ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); var ser2 = new DataContractJsonSerializer(typeof(TokenOptions)); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; var svc = new ShortMessageServiceProxy(); var result = await svc.GetNextFilterOpsAsync(ApplicationContext.ClientContext, _qexpr, ""); strm = new System.IO.MemoryStream(); ser2.WriteObject(strm, result); string json = System.Text.Encoding.UTF8.GetString(strm.ToArray()); return(json); } } } return(null); }
public static async Task<List<dynamic>> LoadRoleChildren(string adminId, int pid) { var maxp = await MemberAdminContext.GetMaxPriority(adminId); RoleServiceProxy svc = new RoleServiceProxy(); var p = await svc.LoadEntityByKeyAsync(Cntx, pid); var childs = await svc.LoadEntityChildrenAsync(Cntx, new EntityAbs<Role>(p)); List<dynamic> jsrts = new List<dynamic>(); foreach (var cc in childs) jsrts.Add(MakeJsonRole(cc, maxp)); return jsrts; }
public async Task <string> GetSetInfo(string sourceId, string set) { JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; EntitySetType type; if (Enum.TryParse <EntitySetType>(sobj["set"], out type)) { string filter = null; if (sobj.ContainsKey("setFilter")) { filter = sobj["setFilter"]; } switch (type) { case EntitySetType.User: { UserServiceProxy svc = new UserServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return(json); } case EntitySetType.Role: { RoleServiceProxy svc = new RoleServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return(json); } case EntitySetType.MemberNotification: { MemberNotificationServiceProxy svc = new MemberNotificationServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return(json); } case EntitySetType.ShortMessage: { if (filter == null) { throw new Exception("The page is not properly parameterized!"); } else { Func <string, string, int> count = (s, p) => { int _cnt = 0; int i = 0; while ((i = s.IndexOf(p, i)) != -1) { _cnt++; i += p.Length; } return(_cnt); }; if (filter.Contains("ToID is null") && filter.Contains("___usergroups___") && count(filter, "||") == 0) { string[] mbgrpIds = await GroupChatViewContext.UserGroupChatMembers(System.Web.HttpContext.Current.User.Identity.GetUserId()); if (mbgrpIds == null || mbgrpIds.Length == 0) { throw new Exception(ResourceUtils.GetString("234038e6185f013e25d0213c06f5a0e9", "You are not a member of any chat group.")); } string groupexpr = ""; foreach (var gid in mbgrpIds) { groupexpr += (groupexpr != "" ? " || " : "") + "GroupID == \"" + gid + "\""; } filter = filter.Replace("___usergroups___", groupexpr); } else if (filter.EndsWith("&& ToID is not null && GroupID is null && ( ToID == \"{0}\" || FromID == \"{0}\" )") && count(filter, "||") == 1) { filter = string.Format(filter, System.Web.HttpContext.Current.User.Identity.GetUserId()); } else { throw new Exception("The page is not properly parameterized!"); } } ShortMessageServiceProxy svc = new ShortMessageServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return(json); } } } return(null); }
public static async Task<dynamic> CreateNewRole(string adminId, string name, int priority, int? pid) { var maxp = await MemberAdminContext.GetMaxPriority(adminId); if (maxp.Major < priority) return new { ok = false, msg = string.Format(ResourceUtils.GetString("0452f93e5e52c7eae26c4fac7aa2d5d7", "Denined! Your role priority: {0} is less than the requested one."), maxp.Major), role = new { } }; RoleServiceProxy rsvc = new RoleServiceProxy(); if (pid != null) { var prole = await rsvc.LoadEntityByKeyAsync(Cntx, pid.Value); if (prole.RolePriority >= priority) return new { ok = false, msg = string.Format(ResourceUtils.GetString("b1ac4f163f802b8cb0c9216a2845c96b", "Denined! The role priority: {0} is less than or equals to the one for the parent role."), priority), role = new { } }; } Role r = new Role { RoleName = name, RolePriority = priority, ApplicationID = ApplicationContext.App.ID, DisplayName = name, ParentID = pid }; var result = await rsvc.AddOrUpdateEntitiesAsync(Cntx, new RoleSet(), new Role[] { r }); if ((result.ChangedEntities[0].OpStatus & (int)EntityOpStatus.Added) > 0) { var rabs = new EntityAbs<Role>(result.ChangedEntities[0].UpdatedItem); rabs.ParentExists = pid != null; return new { ok = true, msg = "", role = MakeJsonRole(rabs, maxp) }; } else { if ((result.ChangedEntities[0].OpStatus & (int)EntityOpStatus.Duplication) > 0) return new { ok = false, msg = ResourceUtils.GetString("a1794e1f262706c9409389bcfcff7499", "An existing role with the same name exists!"), role = new { } }; else return new { ok = false, msg = ResourceUtils.GetString("aa1d969415687af8bf4e3ba5e4e3bc14", "Add failed, try again?"), role = new { } }; } }
public async Task <string> GetPageItems(string sourceId, string set, string qexpr, string prevlast) { JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; EntitySetType type; if (Enum.TryParse <EntitySetType>(sobj["set"], out type)) { switch (type) { case EntitySetType.User: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(User)); var ser3 = new JavaScriptSerializer(); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; UserServiceProxy svc = new UserServiceProxy(); UserSet _set = new UserSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) { _set.SetFilter = sobj["setFilter"]; } User _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as User; } var result = await svc.GetPageItemsAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); var ar = new List <dynamic>(); foreach (var e in result) { ar.Add(new { Id = e.ID.ToString(), DistinctString = e.DistinctString }); } string json = ser3.Serialize(ar); return(json); } case EntitySetType.Role: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(Role)); var ser3 = new JavaScriptSerializer(); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; RoleServiceProxy svc = new RoleServiceProxy(); RoleSet _set = new RoleSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) { _set.SetFilter = sobj["setFilter"]; } Role _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as Role; } var result = await svc.GetPageItemsAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); var ar = new List <dynamic>(); foreach (var e in result) { ar.Add(new { Id = e.ID.ToString(), DistinctString = e.DistinctString }); } string json = ser3.Serialize(ar); return(json); } case EntitySetType.MemberNotification: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(MemberNotification)); var ser3 = new JavaScriptSerializer(); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; MemberNotificationServiceProxy svc = new MemberNotificationServiceProxy(); MemberNotificationSet _set = new MemberNotificationSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) { _set.SetFilter = sobj["setFilter"]; } MemberNotification _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as MemberNotification; } var result = await svc.GetPageItemsAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); var ar = new List <dynamic>(); foreach (var e in result) { ar.Add(new { Id = e.ID.ToString(), DistinctString = e.DistinctString }); } string json = ser3.Serialize(ar); return(json); } } } return(null); }
public static async Task<dynamic> UpdateRole(string adminId, int id, int priority, int? pid) { var maxp = await MemberAdminContext.GetMaxPriority(adminId); if (maxp.Major < priority) return new { ok = false, msg = string.Format(ResourceUtils.GetString("0452f93e5e52c7eae26c4fac7aa2d5d7", "Denined! Your role priority: {0} is less than the requested one."), maxp.Major), role = new { } }; RoleServiceProxy rsvc = new RoleServiceProxy(); if (pid != null) { var prole = await rsvc.LoadEntityByKeyAsync(Cntx, pid.Value); if (prole.RolePriority >= priority) return new { ok = false, msg = string.Format(ResourceUtils.GetString("b1ac4f163f802b8cb0c9216a2845c96b", "Denined! The role priority: {0} is less than or equals to the one for the parent role."), priority), role = new { } }; } var r = await rsvc.LoadEntityByKeyAsync(Cntx, id); if (r == null) return new { ok = false, msg = ResourceUtils.GetString("2dcb0c4ea3d378571beac6927e1a4a99", "The role is not found!") }; if (r.RolePriority == priority) return new { ok = true, msg = "" }; var _r = await rsvc.LoadEntityHierarchyRecursAsync(Cntx, r, 0, -1); if (_r.ChildEntities != null) { if (!checkRolePrior(priority, _r.ChildEntities)) return new { ok = false, msg = string.Format(ResourceUtils.GetString("680d7ee4f668b8eac69d8153e3e25293", "The attempted role priority: {0} is greater than or equals to one of child role priorities."), priority) }; } r.RolePriority = priority; var result = await rsvc.AddOrUpdateEntitiesAsync(Cntx, new RoleSet(), new Role[] { r }); if ((result.ChangedEntities[0].OpStatus & (int)EntityOpStatus.Updated) > 0) { var rabs = new EntityAbs<Role>(result.ChangedEntities[0].UpdatedItem); rabs.ParentExists = pid != null; return new { ok = true, msg = "" }; } else { if ((result.ChangedEntities[0].OpStatus & (int)EntityOpStatus.Duplication) > 0) return new { ok = false, msg = ResourceUtils.GetString("a1794e1f262706c9409389bcfcff7499", "An existing role with the same name exists!"), role = new { } }; else return new { ok = false, msg = ResourceUtils.GetString("a91c35ceb071295cf0c07ef4acc9424e", "Update failed, try again?") }; } }
public async Task<string> GetSetInfo(string sourceId, string set) { JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; EntitySetType type; if (Enum.TryParse<EntitySetType>(sobj["set"], out type)) { string filter = null; if (sobj.ContainsKey("setFilter")) filter = sobj["setFilter"]; switch (type) { case EntitySetType.User: { UserServiceProxy svc = new UserServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return json; } case EntitySetType.Role: { RoleServiceProxy svc = new RoleServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return json; } case EntitySetType.MemberNotification: { MemberNotificationServiceProxy svc = new MemberNotificationServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return json; } case EntitySetType.ShortMessage: { if (filter == null) throw new Exception("The page is not properly parameterized!"); else { Func<string, string, int> count = (s, p) => { int _cnt = 0; int i = 0; while ((i = s.IndexOf(p, i)) != -1) { _cnt++; i += p.Length; } return _cnt; }; if (filter.Contains("ToID is null") && filter.Contains("___usergroups___") && count(filter, "||") == 0) { string[] mbgrpIds = await GroupChatViewContext.UserGroupChatMembers(System.Web.HttpContext.Current.User.Identity.GetUserId()); if (mbgrpIds == null || mbgrpIds.Length == 0) throw new Exception(ResourceUtils.GetString("234038e6185f013e25d0213c06f5a0e9", "You are not a member of any chat group.")); string groupexpr = ""; foreach (var gid in mbgrpIds) groupexpr += (groupexpr != "" ? " || " : "") + "GroupID == \"" + gid + "\""; filter = filter.Replace("___usergroups___", groupexpr); } else if (filter.EndsWith("&& ToID is not null && GroupID is null && ( ToID == \"{0}\" || FromID == \"{0}\" )") && count(filter, "||") == 1) { filter = string.Format(filter, System.Web.HttpContext.Current.User.Identity.GetUserId()); } else throw new Exception("The page is not properly parameterized!"); } ShortMessageServiceProxy svc = new ShortMessageServiceProxy(); var si = await svc.GetSetInfoAsync(ApplicationContext.ClientContext, filter); JavaScriptSerializer ser = new JavaScriptSerializer(); string json = ser.Serialize(new { EntityCount = si.EntityCount, Sorters = si.Sorters }); return json; } } } return null; }
public static async Task <string> GetManagedUsers(string adminId, string set, string qexpr, string prevlast) { var maxp = await GetMaxPriority(adminId); JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; EntitySetType type; if (Enum.TryParse <EntitySetType>(sobj["set"], out type)) { switch (type) { case EntitySetType.User: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(User)); var ser3 = new JavaScriptSerializer(); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; UserServiceProxy svc = new UserServiceProxy(); UserSet _set = new UserSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) { _set.SetFilter = sobj["setFilter"]; } User _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as User; } RoleServiceProxy rsvc = new RoleServiceProxy(); var roles = await rsvc.QueryDatabaseAsync(Cntx, new RoleSet(), null); var result = await svc.GetPageItemsAsync(Cntx, _set, _qexpr, _prevlast); var ar = new List <dynamic>(); string appId = ApplicationContext.App.ID; UsersInRoleServiceProxy uirsvc = new UsersInRoleServiceProxy(); foreach (var e in result) { List <Role> rlist = new List <Role>(); foreach (var r in roles) { if (r.RolePriority <= maxp.Major) { rlist.Add(r); } } var p = await GetMaxPriority(e); List <dynamic> rolelist = new List <dynamic>(); var _roles = await svc.MaterializeAllUsersInRole_UserIDsAsync(Cntx, e); dynamic _max = null; if (_roles != null) { List <UsersInRole> _rlist = new List <UsersInRole>(); foreach (var ir in _roles) { ir.RoleRef = uirsvc.MaterializeRoleRef(Cntx, ir); _rlist.Add(ir); } foreach (var ir in from d in _rlist orderby d.RoleRef.RolePriority descending, d.SubPriority descending select d) { bool op = adminId != e.ID && (ir.RoleRef.RolePriority < maxp.Major || ir.RoleRef.RolePriority == maxp.Major && ir.SubPriority <= maxp.Minor); var _r = new { id = ir.RoleRef.ID, uid = ir.UserID, name = ir.RoleRef.RoleName, path = Utils.GetHtmlRolePath(ir.RoleRef.DistinctString), level = ir.SubPriority, op = op }; if (ir.RoleRef.ID == p.MaxRole.ID) { _max = _r; } rolelist.Add(_r); int ptr = -1; for (int i = 0; i < rlist.Count; i++) { if (rlist[i].ID == ir.RoleRef.ID) { ptr = i; break; } } if (ptr != -1) { rlist.RemoveAt(ptr); } } } List <dynamic> availablers = new List <dynamic>(); //if (adminId != e.ID) { foreach (var r in rlist) { availablers.Add(new { id = r.ID, name = r.RoleName, path = Utils.GetHtmlRolePath(r.DistinctString), op = true }); } } var membs = svc.MaterializeAllUserAppMembers(Cntx, e); ar.Add(new { data = e, member = (from d in membs where d.ApplicationID == appId select d).SingleOrDefault(), roles = rolelist.ToArray(), maxrole = _max, availableRoles = availablers.ToArray(), CanEdit = p.IsLowerOrEqual(maxp) }); } string json = ser3.Serialize(ar); return(json); } } } return(null); }
public async Task<string> GetPageItems(string sourceId, string set, string qexpr, string prevlast) { JavaScriptSerializer jser = new JavaScriptSerializer(); dynamic sobj = jser.DeserializeObject(set) as dynamic; EntitySetType type; if (Enum.TryParse<EntitySetType>(sobj["set"], out type)) { switch (type) { case EntitySetType.User: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(User)); var ser3 = new JavaScriptSerializer(); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; UserServiceProxy svc = new UserServiceProxy(); UserSet _set = new UserSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) _set.SetFilter = sobj["setFilter"]; User _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as User; } var result = await svc.GetPageItemsAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); var ar = new List<dynamic>(); foreach (var e in result) { ar.Add(new { Id = e.ID.ToString(), DistinctString = e.DistinctString }); } string json = ser3.Serialize(ar); return json; } case EntitySetType.Role: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(Role)); var ser3 = new JavaScriptSerializer(); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; RoleServiceProxy svc = new RoleServiceProxy(); RoleSet _set = new RoleSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) _set.SetFilter = sobj["setFilter"]; Role _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as Role; } var result = await svc.GetPageItemsAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); var ar = new List<dynamic>(); foreach (var e in result) { ar.Add(new { Id = e.ID.ToString(), DistinctString = e.DistinctString }); } string json = ser3.Serialize(ar); return json; } case EntitySetType.MemberNotification: { DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion)); DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(MemberNotification)); var ser3 = new JavaScriptSerializer(); System.IO.MemoryStream strm = new System.IO.MemoryStream(); byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; var _qexpr = ser1.ReadObject(strm) as QueryExpresion; MemberNotificationServiceProxy svc = new MemberNotificationServiceProxy(); MemberNotificationSet _set = new MemberNotificationSet(); _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]); _set.PageSize_ = int.Parse(sobj["pageSize"]); if (sobj.ContainsKey("setFilter")) _set.SetFilter = sobj["setFilter"]; MemberNotification _prevlast = null; if (!string.IsNullOrEmpty(prevlast)) { strm = new System.IO.MemoryStream(); sbf = System.Text.Encoding.UTF8.GetBytes(prevlast); strm.Write(sbf, 0, sbf.Length); strm.Position = 0; _prevlast = ser2.ReadObject(strm) as MemberNotification; } var result = await svc.GetPageItemsAsync(ApplicationContext.ClientContext, _set, _qexpr, _prevlast); var ar = new List<dynamic>(); foreach (var e in result) { ar.Add(new { Id = e.ID.ToString(), DistinctString = e.DistinctString }); } string json = ser3.Serialize(ar); return json; } } } return null; }
public static async Task<dynamic> LoadRoomSummary(string hubId, string id) { UserGroupServiceProxy gsvc = new UserGroupServiceProxy(); var cntx = Cntx; string descr = await gsvc.LoadEntityGroupDescriptionAsync(cntx, id); MemberCallbackServiceProxy mcbsvc = new MemberCallbackServiceProxy(); var qexpr = getConnectedGroupMemberFilter(hubId, id); long cnt = await mcbsvc.QueryEntityCountAsync(cntx, new MemberCallbackSet(), qexpr); UserGroupMemberServiceProxy uigsvc = new UserGroupMemberServiceProxy(); qexpr = new QueryExpresion(); qexpr.OrderTks = new List<QToken>(new QToken[] { new QToken { TkName = "UserID" } }); qexpr.FilterTks = new List<QToken>(new QToken[] { new QToken { TkName = "UserGroupID == \"" + id + "\" && SubscribedTo is not null && SubscribedTo == true" } }); long scnt = await uigsvc.QueryEntityCountAsync(cntx, new UserGroupMemberSet(), qexpr); qexpr = new QueryExpresion(); qexpr.OrderTks = new List<QToken>(new QToken[] { new QToken { TkName = "Username" } }); qexpr.FilterTks = new List<QToken>(new QToken[] { new QToken { TkName = "UsersInRole_UserID.RoleRef.UserGroupAdminRole.GroupID == \"" + id + "\"" } }); UserServiceProxy usvc = new UserServiceProxy(); var admins = await usvc.QueryDatabaseAsync(cntx, new UserSet(), qexpr); List<dynamic> ladms = new List<dynamic>(); if (admins.Count() > 0) { RoleServiceProxy rsvc = new RoleServiceProxy(); foreach (var u in admins) { qexpr = new QueryExpresion(); qexpr.OrderTks = new List<QToken>(new QToken[] { new QToken { TkName = "ID" } }); qexpr.FilterTks = new List<QToken>(new QToken[] { new QToken { TkName = "UserGroupAdminRole.GroupID == \"" + id + "\" && UsersInRole.UserID == \"" + u.ID + "\"" } }); var role = (await rsvc.QueryDatabaseAsync(cntx, new RoleSet(), qexpr)).First(); ladms.Add(new { id = u.ID, name = u.Username, role = role.DisplayName }); } } dynamic r = new { descr = descr, active = cnt, subscribers = scnt, admins = ladms }; return r; }