zoukankan      html  css  js  c++  java
  • 递归权限树的实现

    1

    /// <summary>
        /// 角色权限Model
        /// </summary>
        public class RoleRightBllModel
        {
            /// <summary>
            /// 权限Id
            /// </summary>
            public int RightId { get; set; }
    
            /// <summary>
            /// 权限名称
            /// </summary>
            public string RightName { get; set; }
    
            /// <summary>
            /// 权限(由Crud的权限按位或生成)
            /// </summary>
            public int Right { get; set; }
    
            /// <summary>
            /// 子权限
            /// </summary>
            public IEnumerable<RoleRightBllModel> SubRights { get; set; }
        }

    2

    /// <summary>
        /// 角色权限Model
        /// </summary>
        public class RoleRightModel
        {
            /// <summary>
            /// Id
            /// </summary>
            public int Id { get; set; }
    
            /// <summary>
            /// 角色Id
            /// </summary>
            public int RoleId { get; set; }
    
            /// <summary>
            /// 权限Id
            /// </summary>
            public int RightId { get; set; }
    
            /// <summary>
            /// 权限名称
            /// </summary>
            public string RightName { get; set; }
    
            /// <summary>
            /// 父权限Id
            /// </summary>
            public int ParentRightId { get; set; }
    
            /// <summary>
            /// 权限(由Crud的权限按位或生成)
            /// </summary>
            public int Right { get; set; }
        }

    3.

    public static class RightHelper
        {
            public static IList<RoleRightBllModel> GetRoleRights(this IEnumerable<RoleRightModel> roleRightModels, int parentRightId = 0)
            {
                if (roleRightModels == null)
                {
                    return null;
                }
    
                var result = roleRightModels.Where(p => p.ParentRightId == parentRightId).Select(p => new RoleRightBllModel()
                {
                    Right = p.Right,
                    RightId = p.RightId,
                    RightName = p.RightName,
                    SubRights = null
                }).ToList();
    
                foreach (var item in result)
                {
                    var sub = roleRightModels.Where(p => p.ParentRightId == item.RightId);
                    if (sub.Any())
                    {
                        item.SubRights = roleRightModels.GetRoleRights(item.RightId);
                    }
                }
    
                return result;
            }
        }

    4.调用代码]

    public class RightTest
        {
            public static void Execute()
            {
                var rights = new List<RoleRightModel>
                {
                    {
                        new RoleRightModel()
                        {
                            Id=1,
                            RoleId = 1001,
                            Right = 7,
                            RightId = 1,
                            RightName = "权限1",
                            ParentRightId = 0
                        }
                    }, 
                     {
                        new RoleRightModel()
                        {
                            Id=2,
                            RightId = 2,
                            RoleId = 1001,
                            Right = 7,
                            RightName = "权限2",
                            ParentRightId = 0
                        }
                    }, 
                    {
                        new RoleRightModel()
                        {
                            Id=12,
                            RightId = 12,
                            RoleId = 1001,
                            Right = 7,
                            RightName = "权限12",
                            ParentRightId = 1
                        }
                    },
                    {
                        new RoleRightModel()
                        {
                            Id=13,
                            RightId = 13,
                            RoleId = 1001,
                            Right = 7,
                            RightName = "权限13",
                            ParentRightId = 1
                        }
                    },
                    {
                        new RoleRightModel()
                        {
                            Id=102,
                            RightId = 102,
                            RoleId = 1001,
                            Right = 7,
                            RightName = "权限120",
                            ParentRightId = 12
                        }
                    },
                    {
                        new RoleRightModel()
                        {
                            Id=103,
                            RightId = 103,
                            RoleId = 1001,
                            Right = 7,
                            RightName = "权限130",
                            ParentRightId = 13
                        }
                    },
                };
    
                var roleRights = rights.GetRoleRights(0);
                 
                Console.WriteLine(roleRights.ToJsonStr());
                Console.Read();
            }
        }

    5.输出代码

  • 相关阅读:
    deb 和 rpm 后缀文件 区别和安装
    20.pipe
    19.Observales
    18.4 运行脚本 sudo ./launcher.sh 必须先给他权限 才能使用
    18.3 redis 的安装
    18.2 不同用户 不同颜色光标 redis
    18.1利用socket .io 实现 editor间代码的同步
    18. socket io
    java 设计模式
    Gson 2.8.jar基础
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/7232246.html
Copyright © 2011-2022 走看看