Пример #1
0
        /// <summary>
        /// 根据登录人拥有的角色过滤菜单项
        /// </summary>
        /// <param name="rawMenu"></param>
        /// <param name="principalRoles"></param>
        /// <returns></returns>
        private static DTObject FilterMenu(DTObject rawMenu, Principal.Role[] principalRoles)
        {
            var menuRoles = rawMenu.GetList("roles", false);

            if (menuRoles != null)
            {
                var roleCodes = menuRoles.ToArray <string>();
                var result    = principalRoles.FirstOrDefault((role) =>
                {
                    return(roleCodes.Contains(role.MarkedCode, StringComparer.OrdinalIgnoreCase));
                });
                if (result == null)
                {
                    return(null);                //当前登录人没有菜单需要的角色,不能显示
                }
            }

            DTObject menu = DTObject.CreateReusable();

            foreach (var member in _outputMembers)
            {
                if (rawMenu.Exist(member))
                {
                    menu[member] = rawMenu[member];
                }
            }

            rawMenu.Each("childs", (child) =>
            {
                var target = FilterMenu(child, principalRoles);
                if (target != null)
                {
                    menu.Push("childs", target);
                }
            });

            return(menu);
        }
 public static bool Exist(DTObject arg)
 {
     return(arg.Exist("datatable[pagination][page]"));
 }