Пример #1
0
        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);
        }
Пример #2
0
 public static bool VerifyAction(ActionEntity action, string rolePrivilege)
 {
     if (RBACManager.ActionList == null || rolePrivilege.IsNullOrEmpty())
     {
         return(false);
     }
     //验证此角色是否有访问该页面的权限
     return(rolePrivilege.ToLower().Contains(action.Privilege.ToLower()));
 }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }