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;
 }
Пример #2
0
        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);
        }