/// <summary> /// 递归生成权限树形结构数据 /// </summary> /// <param name="permissionData"></param> /// <param name="parentName"></param> /// <param name="parentLevel"></param> /// <returns></returns> protected List <PermissionTreeDto> GetPermissionTreeStruct(ListResultDto <FlatPermissionDto> permissionData, string parentName, int parentLevel) { List <PermissionTreeDto> treeList = new List <PermissionTreeDto>(); var level = parentLevel + 1; var treeData = permissionData.Items.Where(b => b.ParentName == parentName).ToList(); foreach (var item in treeData) { var children = GetPermissionTreeStruct(permissionData, item.Name, level); var model = new PermissionTreeDto() { title = item.DisplayName, name = item.Name, level = level }; model.children = children.Count <= 0 ? null : children; model.expand = level <= 2 ? true : false; treeList.Add(model); } return(treeList); }
/// <summary> /// 查询角色权限树 /// </summary> /// <param name="roleId"></param> /// <returns></returns> public IList <PermissionTreeDto> QueryRolePermissionForTree(int roleId) { using (ISession session = AuthoritySessionProvider.GetSession()) { using (ITransaction transaction = session.BeginTransaction()) { List <PermissionTreeDto> trees = new List <PermissionTreeDto>(); PermissionTreeDto tree = new PermissionTreeDto { Title = "系统权限", Expand = true, Category = "root", Id = 0, Children = new List <PermissionTreeDto>() }; Role role = session .QueryOver <Role>() .And(x => x.Id == roleId) .Fetch(SelectMode.ChildFetch, x => x.RoleModules) .Fetch(SelectMode.ChildFetch, x => x.RolePermissions) .List() .FirstOrDefault(); if (role.RoleModules.Any()) { foreach (var module in role.RoleModules) { PermissionTreeDto childModule = new PermissionTreeDto { Title = module.AuthorityModule.Name, Expand = false, Id = module.AuthorityModule.Id, Category = "module", Children = new List <PermissionTreeDto>() }; AuthorityModule authorityModule = module.AuthorityModule; if (authorityModule.AuthorityPages.Any()) { foreach (var page in authorityModule.AuthorityPages) { PermissionTreeDto childPage = new PermissionTreeDto { Title = page.Name, Expand = true, Id = page.Id, Category = "page", Children = new List <PermissionTreeDto>() }; if (page.Permissions.Any()) { var rolePermissions = role.RolePermissions.Select(x => x.Permission); foreach (var permission in page.Permissions) { if (page.Id == permission.AuthorityPage.Id) { bool isChecked = rolePermissions.Contains(permission); PermissionTreeDto childPermission = new PermissionTreeDto { Title = permission.Name, Expand = true, Id = permission.Id, Category = "per", Checked = isChecked, Children = new List <PermissionTreeDto>() }; childPage.Children.Add(childPermission); } } } childModule.Children.Add(childPage); } } tree.Children.Add(childModule); } } trees.Add(tree); transaction.Commit(); return(trees); } } }