/// <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]")); }