zoukankan      html  css  js  c++  java
  • c#递归读取菜单树

    1.查询菜单节点下所有子节点id

    List<sys_module> menus = new List<sys_module>() { };

    public async Task<PostResult<int>> DeleteModule(int? id)
    {
    return await Task.Run(() =>
    {
    var cnt = 1;
    var childids = new List<int?>() { id };
    var list = db.Queryable<sys_module>().Where(c => c.isdel == "N").ToList();
    foreach (var item in list.FindAll(c => c.parentid == id))
    {
    menus.Add(item);
    FillMenu(item, list);
    }
    foreach (var i in menus)
    {
    childids.Add(i.id);
    }
    if (childids.Any())
    {
    cnt = db.Updateable<sys_module>().UpdateColumns(c => new sys_module() { isdel = "Y" }).Where(c => childids.Contains(c.id)).ExecuteCommand();
    }
    return new PostResult<int>
    {
    data = cnt,
    msg = "success"
    };
    });
    }

    private void FillMenu(sys_module node, List<sys_module> list)
    {
    foreach (var i in list.FindAll(i => i.parentid == node.id))
    {
    menus.Add(i);
    FillMenu(i, list);
    }
    }


    2.查询用户授权的菜单树,(根据用户角色,查询角色关联的菜单树)

    <hr />

    private Tuple<List<string>, List<SysMenuTree>, List<string>> GetModel(sys_user user)
    {
    var roles = new List<string> { "管理员", "普通用户" };//用户角色
    var menutrees = new List<SysMenuTree> { };//用户菜单树
    var permissions = new List<string> { "user_add", "user_edit" };//接口授权标识

    var relations = db.Queryable<sys_relevance>().Where(c => c.isdel == "N").ToList();
    var userroles = relations.Where(c => c.key.Equals("UserRole") &amp;&amp; c.firstid == user.id).Select(c => c.secondid).ToList();
    roles = db.Queryable<sys_role>().Where(c => c.isdel == "N" &amp;&amp; userroles.Contains(c.id)).Select(c => c.name).ToList();

    var rolemenus = relations.Where(c => c.key.Equals("RoleModule") &amp;&amp; userroles.Contains(c.firstid)).Select(c => c.secondid).ToList();
    var menus = db.Queryable<sys_module>().Where(c => c.isdel == "N" &amp;&amp; c.status == "Y" &amp;&amp; rolemenus.Contains(c.id)).ToList(); ;

    permissions = menus.Where(c => !string.IsNullOrEmpty(c.authorize)).Select(c => c.authorize).Distinct().ToList();

    var list = menus.FindAll(c => c.type != 2);
    var trees = new List<SysMenuTree>() { };
    foreach (var i in list.FindAll(c => c.parentid == -1))
    {
    var nodel = new SysMenuTree() { id = i.id, name = i.name, parentid = i.parentid, icon = i.icon, url = i.url, path = i.path };
    trees.Add(nodel);
    FillTree(nodel, list);
    }
    menutrees = trees;

    return Tuple.Create(roles, menutrees, permissions);
    }

    private void FillTree(SysMenuTree node, List<sys_module> list)
    {
    if (list.Any(m => m.parentid == node.id))
    {
    node.subMenus = new List<SysMenuTree>() { };
    }
    foreach (var i in list.FindAll(i => i.parentid == node.id))
    {
    var subnode = new SysMenuTree()
    {
    id = i.id,
    name = i.name,
    parentid = i.parentid,
    icon = i.icon,
    url = i.url,
    path = i.path,
    };
    node.subMenus.Add(subnode);
    FillTree(subnode, list);
    }
    }

  • 相关阅读:
    转-iOS开发系列--地图与定位
    转-关于UIView的autoresizingMask属性的研究
    UIAlertController的使用,代替UIAlertView和UIActionSheet
    设置当前导航栏(navigationController)的标题
    tabBar隐藏方式
    ubuntu 安装qq 及解决安装完搜狗输入法不显示键盘的方法
    python 读写文件
    Ubuntu:如何显示系统托盘图标(systray)
    python tesseract 识别图片中的文字的乱码问题(ubuntu系统下)
    让Ubuntu可以压缩/解压缩RAR文件
  • 原文地址:https://www.cnblogs.com/langhaoabcd/p/10446416.html
Copyright © 2011-2022 走看看