public bool IsMatch(ActionEntity input) { if (input == null || !UrlNotParameter.Equals(input.UrlNotParameter)) { return(false); } int compare = 0; foreach (ActionParameter param in Constraints.Values) { if (param.Ignore) { if (!input.Constraints.ContainsKey(param.Name)) { continue; } if (!param.IsMatch(input.Constraints[param.Name])) { return(false); } else { compare++; continue; } } if (!input.Constraints.ContainsKey(param.Name) || !param.IsMatch(input.Constraints[param.Name])) { return(false); } compare++; } return(compare == input.Constraints.Count); }
public static bool VerifyAction(ActionEntity action, string rolePrivilege) { if (RBACManager.ActionList == null || rolePrivilege.IsNullOrEmpty()) { return(false); } //验证此角色是否有访问该页面的权限 return(rolePrivilege.ToLower().Contains(action.Privilege.ToLower())); }
private static void LoadMenu(XmlNode node, Menu pmenu) { if (node.Name.ToLower() == "menu") { Menu m = new Menu(); m.Name = node.GetAttribute("name", ""); m.DN = node.GetAttribute("dn", ""); m.Icon = node.GetAttribute("icon", ""); m.Index = node.GetAttribute("index", 0); m.Privilege = node.GetAttribute("privilege", ""); m.Url = node.GetAttribute("url", "javascript:void(0)"); pmenu.Children.Add(m); if (node.HasChildNodes) { foreach (XmlNode n in node.ChildNodes) { LoadMenu(n, m); } } } else if (node.Name.ToLower() == "action") { ActionEntity act = new ActionEntity(); string url = node.GetAttribute("url", null).ToLower(); act.RawUrl = url; if (url.IndexOf('?') != -1) { url = url.Substring(0, url.IndexOf('?')); } string parameter = node.GetAttribute("constraints", null).ToLower(); if (!String.IsNullOrEmpty(parameter)) { parameter = "?" + parameter; } //处理mvc默认 //if (url.Split('/').Length>3&&url.IndexOf('.') == -1) //{ // string id= url.Substring(url.IndexOf('.') + 1); // if (!String.IsNullOrEmpty(parameter)) // parameter += "$id=" + id; // else // parameter = "?" + parameter; //} // act.Url = url + parameter; act.Privilege = node.GetAttribute("privilege", null).ToLower(); pmenu.ActionList.Add(act); RBAC.Menu.ActionList.Add(act); } }
public static ActionEntity FindAction(string url, IDictionary <string, ActionParameter> pars) { ActionEntity input = new ActionEntity() { Url = url, Constraints = pars }; if (RBACManager.ActionList == null || RBACManager.ActionList.Count == 0) { return(null); } foreach (ActionEntity section in RBACManager.ActionList) { if (section.IsMatch(input)) { return(section); } } return(null); }
private static Menu GetMenusByUrl(Menu parentmenu, string parenturl, Menu nav) { if (nav == null || nav.Children == null || nav.Children.Count == 0) { return(null); } ActionEntity act1 = new ActionEntity(); act1.Url = parenturl; foreach (Menu m in parentmenu.Children) { //看看url是否在action里面 if (m.ActionList != null) { foreach (var act in m.ActionList) { if (act.IsMatch(act1)) { return(m); } } } //看和本节点是否匹配 if (parenturl.ToLower() == m.Url.ToLower()) { return(m); } else { Menu menu = GetMenusByUrl(m, parenturl, nav); if (menu != null) { return(menu); } } } return(null); }