public bool HasChildren(MenuTree menu) { using (var db = new WebPagesContext()) { return db.MenuTrees.Where(o=>o.ParentId == menu.MenuId).Any(); } }
public static MvcHtmlString GetParentNavigation(this HtmlHelper helper, WebMenu menu) { if (menu == null || !menu.ParentId.HasValue) return null; StringBuilder sb = new StringBuilder(); MenuTree parent; int menuId = menu.ParentId.Value; using (var db = new WebPagesContext()) { do { parent = db.MenuTrees.First(o => o.MenuId == menuId); sb.Insert(0," > " + helper.ActionLink(parent.MenuName, "Search", new { ParentID = parent.MenuId })); menuId = parent.ParentId??0; } while (parent.ParentId.HasValue); } sb.Insert(0, helper.ActionLink("Root", "Search").ToString()); return MvcHtmlString.Create(sb.ToString()); }
public SimpleMembershipInitializer() { Database.SetInitializer<WebPagesContext>(null); try { using (var context = new WebPagesContext()) { if (!context.Database.Exists()) { // Create the SimpleMembership database without Entity Framework migration schema ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); } } WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); } catch (Exception ex) { throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex); } }
/// <summary> /// 取得功能库中节点RootID下一层的数据集 /// </summary> /// <param name="RootID">节点ID</param> /// <returns>节点RootID的下一层节点的数据集</returns> public static MenuTree[] GetOneFloorByRootID(int RootID,bool isPublic=false) { if (RootID < 0 && RootID != TreeRootID)//当节点值<0并且又不是主根节点时 return null; using (var db = new WebPagesContext()) { if (RootID != TreeRootID) return db.MenuTrees.Where(o => o.ParentId == RootID && o.IsPublic == isPublic).OrderBy(o => o.OrderIndex).ToArray(); var query=db.MenuTrees.Where(o => o.ParentId == null && o.IsPublic == isPublic).OrderBy(o => o.OrderIndex); var sql = query.ToString(); return query.ToArray(); } }
/// <summary> /// 取得节点menuid所有的父节点列表 /// </summary> /// <param name="menuid">节点ID</param> /// <returns></returns> public static int[] GetParentNodeRoles(int menuid) { using (var db = new WebPagesContext()) { List<int> parentList = new List<int>(); int? parentNodeID = (from m in db.MenuTrees where m.MenuId == menuid select m.ParentId).FirstOrDefault(); if (parentNodeID == null) return parentList.ToArray(); while (true) { var parentNode = db.MenuTrees.Where(o => o.MenuId == parentNodeID).FirstOrDefault(); int ThisNodeID = parentNode.MenuId; parentList.Add(ThisNodeID); if (!parentNode.ParentId.HasValue) break; int ParentNodeID = parentNode.ParentId.Value; if (ParentNodeID == TreeRootID)//到达了根节点 break; else parentNodeID = ParentNodeID;//继续循环 } return parentList.ToArray(); } }
public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl) { string provider = null; string providerUserId = null; if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId)) { return RedirectToAction("Manage"); } if (ModelState.IsValid) { // Insert a new user into the database using (WebPagesContext db = new WebPagesContext()) { Webpages_UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower()); // Check if user already exists if (user == null) { // Insert name into the profile table var newUser = new Webpages_UserProfile { UserName = model.UserName }; db.UserProfiles.Add(newUser); db.SaveChanges(); OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName); OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false); WebSecurity.CreateAccount(model.UserName, null); return RedirectToLocal(returnUrl); } else { ModelState.AddModelError("UserName", "User name already exists. Please enter a different user name."); } } } ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName; ViewBag.ReturnUrl = returnUrl; return View(model); }
public static bool CheckThoseVuserContainThisGroup(int[] vuserIds, Webpages_VUser vuser) { if (vuserIds == null || vuserIds.Length == 0) return false; using (var db = new WebPagesContext()) { if (vuser.Type == (int)VUserType.Group) { foreach (int vuserid in vuserIds) { Webpages_VUser vu = db.Webpages_VUsers.FirstOrDefault(o => o.VUserId == vuserid); if (vu.Type == (int)VUserType.Group) { if (IsGroupInGroup(vuser.Role.Code, vu.Role.Code)) { return true; } } } } else { foreach (int vuserid in vuserIds) { Webpages_VUser vu = db.Webpages_VUsers.FirstOrDefault(o=>o.VUserId ==vuserid); if (vu.Type == (int)VUserType.Group) { var user = vuser.User; //if (user.IsUserInGroup(new ADGroup(vu.GroupId))) if(Roles.IsUserInRole(user.UserName,vu.Role.RoleName)) { return true; } } else if (vu.UserID == vuser.UserID) return true; } } return false; } }
private static void AddUserCannotViewPages(ref List<string> list, ref List<int> inIdlist, int rootID, string userId) { MenuTree[] nodes = MenuTreeCtrl.GetOneFloorByRootID(rootID); using (var db = new WebPagesContext()) { if (nodes != null) { foreach (MenuTree menu in nodes) { bool CanViewIt = false; int[] groups = GetThisNodeVuserIdList(menu.MenuId); if (groups != null) { foreach (int id in groups) { Webpages_VUser tmpv = db.Webpages_VUsers.FirstOrDefault(o=>o.VUserId == id); if (tmpv.Type == (int)VUserType.Group) { //ADUser user = new ADUser(userId); //if (user.IsUserInGroup(new ADGroup(tmpv.GroupId))) if(Roles.IsUserInRole(userId,tmpv.Role.RoleName)) { CanViewIt = true; break; } } else { if (string.Compare(tmpv.UserID.ToString(), userId, true) == 0) { CanViewIt = true; break; } } } } if (CanViewIt) {//如果此节点可以被次用户浏览。 inIdlist.Add(menu.MenuId); continue;//停止找自节点,继续找兄弟节点 } else {//此节点此用户不能浏览 string url = menu.PageUrl; if (url != null && url.Length > 0) {//添加不为空的页面 url = StringAnalyse.GetPagePurename(url); if (!list.Contains(url)) list.Add(url); } //寻找此节点的字节点 AddUserCannotViewPages(ref list, ref inIdlist, menu.MenuId, userId); } } } } }
public static Webpages_VUser CreateOrGetByGroupId(string groupCode) { using (var db = new WebPagesContext()) { var vuser = db.Webpages_VUsers.FirstOrDefault(o => o.RoleID == groupCode); if (vuser != null) return vuser; vuser = new Webpages_VUser(); vuser.RoleID = groupCode; vuser.Type = (int)VUserType.Group; db.Webpages_VUsers.Add(vuser); db.SaveChanges(); return vuser; } }
/// <summary> /// 保存 存有节点ID和本节点更改后的角色列表 信息 的Hashtable到数据库 /// </summary> /// <param name="hstbl">存有节点ID和本节点更改后的角色列表 信息 的Hashtable</param> private static void SaveHashTableInfo(List<MenuNodeInfo> hstbl) { if (hstbl == null) return; using (var db = new WebPagesContext()) { var tra = db.Database.Connection.BeginTransaction(); try { foreach (MenuNodeInfo item in hstbl) { int menuid = item.Nodeid; foreach (int vuserid in item.AddedVUserids) { var right = db.MenuTreeRights.Find(menuid ,vuserid); if (right == null) { right = new MenuTreeRight(); right.MenuId = menuid; right.VuserID = vuserid; db.MenuTreeRights.Add(right); } } if (item.RemovedVUserids != null) { StringBuilder strDeleteVuserids = new StringBuilder(); foreach (int vuserid in item.RemovedVUserids) { var menu = db.MenuTrees.Find(menuid, vuserid); db.Entry(menu).State = System.Data.EntityState.Deleted; } } } db.SaveChanges(); tra.Commit(); } catch { tra.Rollback(); throw; } finally { db.Dispose(); } } }
public static void GetUserMenuTree(ref TreeView treeview, string appVirtualPath, Webpages_VUser vuser, int rootID, bool chechBox, bool isAddUrl, bool isShowAllAndSelectOwner) { if (treeview == null) return; if (vuser == null) { GetPublicMenuTree(ref treeview, appVirtualPath, rootID, chechBox, isAddUrl, isShowAllAndSelectOwner); return; } MenuTree[] trees = GetOneFloorByRootID(rootID); using (var db = new WebPagesContext()) { if (trees != null && trees.Length > 0) { treeview.Target = _Target; int i = 0; bool IsAdmin = false;//管理员 Webpages_Roles group = db.WebPagesRoles.FirstOrDefault(o=>o.Code == AdminUserRoleCode); if (group != null) { if (vuser.Type == (int)VUserType.User) { Webpages_UserProfile user = db.UserProfiles.FirstOrDefault(o=>o.UserId == vuser.UserID); //if (user.IsUserInGroup(group)) if(Roles.IsUserInRole(user.UserName,group.RoleName)) { IsAdmin = true; } } else { Webpages_Roles vGroup = db.WebPagesRoles.FirstOrDefault(o => o.Code == vuser.RoleID); if (IsGroupInGroup(vuser.Role.Code, group.Code)) { IsAdmin = true; } } } if (IsAdmin) { foreach (MenuTree tree in trees) { if (!isShowAllAndSelectOwner && tree.IsHidden ) continue; //创建存有必要信息的TReeNode TreeNode node = newTreeNode(tree, appVirtualPath, chechBox, isAddUrl, false); if (isShowAllAndSelectOwner) { //if (!IsParentChecked(node)) node.Checked = true; } treeview.Nodes.Add(node); bool IsThisNodeContainShisUser = true;//管理员拥有所有 AddChildrenToNode(node, null, tree.MenuId, appVirtualPath, ref IsThisNodeContainShisUser, chechBox, isAddUrl, //isShowAllAndSelectOwner && !node.Checked); isShowAllAndSelectOwner, node.Checked); } } else { bool IsThisNodeContainShisUser = false; int[] parentRls = GetThisNodeAllViewRoles(rootID); if (parentRls != null && parentRls.Length > 0) {//判断父节点是否包含 if (CheckThoseVuserContainThisGroup(parentRls, vuser)) { IsThisNodeContainShisUser = true; } } foreach (MenuTree tree in trees) { bool tmpflag = IsThisNodeContainShisUser; if (!isShowAllAndSelectOwner && tree.IsHidden) continue; //string Roles = row["OWNERGROUPCODE"].ToString(); int[] Roles = GetThisNodeAllViewRoles(tree.MenuId); //此节点的角色列表中是不是包含此用户或者角色的标志 if (!tmpflag && Roles != null && Roles.Length > 0) { if (CheckThoseVuserContainThisGroup(Roles, vuser)) { tmpflag = true; } } //创建存有必要信息的TReeNode TreeNode node = newTreeNode(tree, appVirtualPath, chechBox, isAddUrl, false); if (isShowAllAndSelectOwner && tmpflag) { //if (!IsParentChecked(node)) node.Checked = true; } treeview.Nodes.Add(node); AddChildrenToNode(node, vuser.VUserId, tree.MenuId, appVirtualPath, ref tmpflag, chechBox, isAddUrl, //isShowAllAndSelectOwner && !node.Checked); isShowAllAndSelectOwner, node.Checked); if (!tmpflag && !isShowAllAndSelectOwner) { treeview.Nodes[i].ChildNodes.Clear(); treeview.Nodes.RemoveAt(i); } else i++; } } } } }
/// <summary> /// 判断两个Vuser角色的关系 /// </summary> /// <param name="CodeA">角色1</param> /// <param name="CodeB">角色2</param> /// <returns></returns> public static GpCodeRelation GetTwoRelaction(int CodeA, int CodeB) { if (CodeA == 0 || CodeB == 0) return GpCodeRelation.Error; if (CodeA == CodeB) return GpCodeRelation.Equality; using (var db = new WebPagesContext()) { var a = db.Webpages_VUsers.Find(CodeA); var b = db.Webpages_VUsers.Find(CodeB); if (a== null) return GpCodeRelation.Error; if (b == null) return GpCodeRelation.Error; if (a.Type == (int)VUserType.User && b.Type ==(int) VUserType.User)//两个全是用户,那么可能是相等或者相离 { if (a.UserID == b.UserID) return GpCodeRelation.Equality; else return GpCodeRelation.Separate; } else if (a.Type == (int)VUserType.User && b.Type == (int)VUserType.Group)//A是用户,B是机构,可能是A被B包含或者相离 { var u = a.User; var g = b.Role; if (System.Web.Security.Roles.IsUserInRole(u.UserName,g.RoleName)) return GpCodeRelation.Bycontain; else return GpCodeRelation.Separate; } else if (a.Type == (int)VUserType.Group && b.Type == (int)VUserType.Group) { if (MenuTreeCtrl.IsGroupInGroup(a.Role.Code, b.Role.Code)) return GpCodeRelation.Bycontain; else if (MenuTreeCtrl.IsGroupInGroup(b.Role.Code, a.Role.Code)) return GpCodeRelation.Contain; else return GpCodeRelation.Separate; } else if (a.Type ==(int) VUserType.Group && b.Type == (int)VUserType.User) { var u = b.User; var g = a.Role; if (System.Web.Security.Roles.IsUserInRole(u.UserName,g.RoleName)) return GpCodeRelation.Contain; else return GpCodeRelation.Separate; } return GpCodeRelation.Error; } }
/// <summary> /// 取得大角色BigCode除去小角色smallCode的角色列表,以;分割 /// (不管俩个相差多少级) /// </summary> /// <param name="BigCode">角色代码(如:1-1-1)</param> /// <param name="smallCode">属于BigCode的小角色代码(如:1-1-1-1)</param> /// <returns>角色BigCode除去smallCode的角色列表</returns> private static int[] GetRoleExceptThisRole(int BigCode, int smallCode) { using (var db = new WebPagesContext()) { Webpages_VUser bigGroup = db.Webpages_VUsers.Find(BigCode); if (bigGroup == null) throw new DataException("VuserId:" + BigCode); if (bigGroup.Type ==(int) VUserType.User) return new int[0]; var smGroup = db.Webpages_VUsers.Find(smallCode); if (smGroup == null) throw new DataException("VuserId:" + smallCode); var group = bigGroup.Role; var list = group.GetOneFloorGroups(db);//取得角色BigCode的下一层子角色 List<int> AllChildrenCode = new List<int>(); if (list != null && list.Length > 0) { foreach (var role in list) { var tmp = Webpages_VUser.CreateOrGetByGroupId(role.Code); GpCodeRelation Rel = GetTwoRelaction(tmp.VUserId, smallCode); if (Rel == GpCodeRelation.Equality) continue;//如果相等,跳过 else if (Rel == GpCodeRelation.Separate)//如果相离 AllChildrenCode.Add(tmp.VUserId);//保存 else if (Rel == GpCodeRelation.Contain)//如果还包含 { //递归取得下一层 int[] rst = GetRoleExceptThisRole(tmp.VUserId, smallCode); if (rst != null) AllChildrenCode.AddRange(rst); } } } var users = group.GetUsers(false); if (users != null && users.Length > 0) { foreach (var user in users) { var tmp = Webpages_VUser.CreateOrGetByUserId(user.UserId); GpCodeRelation Rel = GetTwoRelaction(tmp.VUserId, smallCode); if (Rel == GpCodeRelation.Equality) continue;//如果相等,跳过 else if (Rel == GpCodeRelation.Separate)//如果相离 AllChildrenCode.Add(tmp.VUserId);//保存 //用户不可能包含其他的用户或者机构 } } return AllChildrenCode.ToArray(); } }
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) { if (config == null) throw new ArgumentNullException("config"); if (string.IsNullOrEmpty(name)) name = DEFAULT_NAME; base.Initialize(name, config); var providerName = config[DEFAULT_PROVIDER_CONFIG_NAME]; if (!string.IsNullOrEmpty(providerName)) this.preProvider = Roles.Providers[providerName] ?? Roles.Providers[DEFAULT_PROVIDER_NAME]; this.dbContext = new WebPagesContext(); }
public static Webpages_VUser Find(int vuserid) { using (var db = new WebPagesContext()) { return db.Webpages_VUsers.FirstOrDefault(o => o.VUserId == vuserid); } }
public static Webpages_VUser CreateOrGetByUserId(int userid) { using (var db = new WebPagesContext()) { var vuser = db.Webpages_VUsers.FirstOrDefault(o => o.UserID == userid); if (vuser != null) return vuser; if (db.UserProfiles.Find(userid) == null) return null; vuser = new Webpages_VUser(); vuser.UserID = userid; vuser.Type = (int)VUserType.User; db.Webpages_VUsers.Add(vuser); db.SaveChanges(); return vuser; } }
/// <summary> /// 取得节点menuid的某一列 /// </summary> /// <param name="menuid">节点ID</param> /// <param name="columnName"></param> /// <returns>节点menuid的角色列表</returns> public static string GetThisNodePageUrl(int menuid) { using (var db = new WebPagesContext()) { return db.MenuTrees.Where(o => o.MenuId == menuid).Select(o => o.PageUrl).FirstOrDefault(); } }
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) { if (config == null) throw new ArgumentNullException("config"); if (string.IsNullOrEmpty(name)) name = DEFAULT_NAME; base.Initialize(name, config); var providerName = config[DEFAULT_PROVIDER_CONFIG_NAME]; if (!string.IsNullOrEmpty(providerName)) this.preProvider = Membership.Providers[providerName] ?? Membership.Providers[DEFAULT_PROVIDER_NAME]; if (this.preProvider != null) this.preProvider.ValidatingPassword += delegate(object sender, ValidatePasswordEventArgs args) { this.OnValidatingPassword(args); }; this.dbContext = new WebPagesContext(); this.userProfiles = this.dbContext.UserProfiles; this.oAuthMemberships = this.dbContext.WebPagesOAuthMembership; this.roles = this.dbContext.WebPagesRoles; this.usersInRoles = this.dbContext.WebPagesUsersInRoles; this.memberships = this.dbContext.WebPagesMembership; }
/// <summary> /// 取得节点menuid的角色列表 /// </summary> /// <param name="menuid">节点ID</param> /// <returns>节点menuid的角色列表</returns> public static int[] GetThisNodeVuserIdList(int menuid) { using (var db = new WebPagesContext()) { return (from n in db.MenuTrees from r in db.MenuTreeRights where n.MenuId == r.MenuId && n.MenuId == menuid select r.VuserID).ToArray(); } }
public Webpages_Roles[] GetOneFloorGroups(WebPagesContext db=null) { bool flag = db == null; try { if (flag) db = new WebPagesContext(); string[] tmp = this.Code.Split('-'); int TreeDeep = tmp.Length; int type = Convert.ToInt32(tmp[0]); return (from m in db.WebPagesRoles where m.Deep == TreeDeep && m.Type == type && m.Code.IndexOf(this.Code + "-") == 0 orderby m.IndexOrder select m).ToArray(); } finally { if (flag) db.Dispose(); } }
/// <summary> /// 检查节点RootID是不是有子节点 /// </summary> /// <param name="RootID"></param> /// <returns></returns> public static bool IsThisNodeHaveChildren(int RootID) { //MenuTree.TblQuery stu = new MenuTree.TblQuery(ConfigInfo.DataServerType); //stu.PARENTID = RootID; //MenuTree menu = new MenuTree(ConfigInfo.DataServerType); //object obj = menu.ControlHelper.GetOneFieldBy("count(*)", stu, ConfigInfo.ConnectionString); //return obj != null && obj != DBNull.Value && Convert.ToInt32(obj) > 0; using (var db = new WebPagesContext()) { return db.MenuTrees.Any(o => o.ParentId == RootID); } }
public Webpages_Roles GetSubRoleByName(string roleName, WebPagesContext db = null) { bool flag = db == null; try { if (flag) db = new WebPagesContext(); string[] tmp = this.Code.Split('-'); int TreeDeep = tmp.Length; int type = Convert.ToInt32(tmp[0]); return (from m in db.WebPagesRoles where m.RoleName == roleName && m.Deep == TreeDeep && m.Type == type && m.Code.IndexOf(this.Code + "-") == 0 orderby m.IndexOrder select m).FirstOrDefault(); } finally { if (flag) db.Dispose(); } }
public static Webpages_Roles GetOrCreateRoot(int type=1,string rootName="Root",WebPagesContext db=null) { bool flag = db == null; try { string code = type.ToString(); if (flag) db = new WebPagesContext(); var root = db.WebPagesRoles.Where(o => o.Type == type && o.RoleName == rootName && o.Deep == 0 && o.Code == code).FirstOrDefault(); if (root == null) { root = new Webpages_Roles() { Type = type, RoleName = rootName, Deep = 0, Code = type.ToString(), }; db.WebPagesRoles.Add(root); db.SaveChanges(); } return root; } finally { if (flag) db.Dispose(); } }
public Webpages_UserProfile[] GetUsers(bool isWhole, WebPagesContext db = null) { bool flag = db == null; try { if (flag) db = new WebPagesContext(); string[] tmp = this.Code.Split('-'); int TreeDeep = tmp.Length; int type = Convert.ToInt32(tmp[0]); IQueryable<Webpages_Roles> allRoles; if (isWhole) { allRoles = from g in db.WebPagesRoles where g.Code == Code || g.Code.IndexOf(Code + "-") == 0 select g; } else { allRoles = from g in db.WebPagesRoles where g.Code == Code select g; } var allUser = (from u in db.UserProfiles from map in db.WebPagesUsersInRoles from al in allRoles where u.UserId == map.UserId && map.RoleCode == al.Code orderby u.IndexOrder select u).ToArray(); return allUser; } finally { if (flag) db.Dispose(); } }