遞歸權限樹的實現


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.輸出代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM