using CZFW.Framework.Interface; using CZFW.Framework.Model.Entity; using CZFW.Framework.Model.ViewModel; using System.Collections.Generic; using System.Linq; using CZFW.Framework.Model; namespace CZFW.Framework.Logic { public class UserRoleNavigationLogic : LogicBase, IUserRoleNavigation { public IList GetNavigationTreeByRoleId(int roleId) { var list = (from rn in GetQueryable() join nav in DbContext.Set() on rn.NavigationId equals nav.Id where rn.RoleId == roleId select new NavigationModel() { Description = nav.Description, ParentMark = nav.ParentMark, Id = nav.Id, Icon = nav.Icon, Mark = nav.Mark, Name = nav.Name, SortOrder = nav.SortOrder??0, Thumbnail = nav.Thumbnail, Url = nav.Url }).ToList(); var res = SetTree(list, "0"); return res; } public IList GetNavigationTreeByUserId(int userId) { var roles = DbContext.Set() .Where(x => x.UserId == userId) .Select(x => x.RoleId).ToList(); var list = (from rn in GetQueryable() join nav in DbContext.Set() on rn.NavigationId equals nav.Id where roles.Contains(rn.RoleId)||rn.UserId==userId select new NavigationModel() { Description = nav.Description, ParentMark = nav.ParentMark, Id = nav.Id, Icon = nav.Icon, Mark = nav.Mark, Name = nav.Name, SortOrder = nav.SortOrder??0, Thumbnail = nav.Thumbnail, Url = nav.Url }).Distinct().ToList(); var res = SetTree(list, "0"); return res; } public ResultModel GrantRole(int roleId, int navId) { var res = new ResultModel(); var count = GetCount(x => x.RoleId == roleId && x.NavigationId == navId && roleId != 0); if (count > 0) { res.Success = false; res.Message = "该角色已经觉有该授权!"; return res; } var item = new UserRoleNavigationEntity() { RoleId = roleId, NavigationId = navId }; var tp = AddEntity(item); return tp; } public ResultModel GrantRoleNavigations(int roleId, IList navIds) { var exisitingIds = GetQueryable() .Where(x => x.RoleId == roleId && roleId != 0 && navIds.Contains(x.NavigationId)) .Select(x => x.NavigationId).ToList(); var nonExisitingIds = navIds.Where(x => !exisitingIds.Contains(x)).ToList(); var roleNavs = new List(); foreach (var item in nonExisitingIds) { var entity = new UserRoleNavigationEntity() { NavigationId = item, RoleId = roleId }; roleNavs.Add(entity); } var res = AddEntities(roleNavs); return res; } public ResultModel GrantUser(int userId, int navId) { var res = new ResultModel(); var count = GetCount(x => x.UserId == userId && x.NavigationId == navId && userId != 0); if (count > 0) { res.Success = false; res.Message = "该角色已经觉有该授权!"; return res; } var item = new UserRoleNavigationEntity() { UserId = userId, NavigationId = navId }; var tp = AddEntity(item); return tp; } public ResultModel GrantUserNavigations(int userId, IList navIds) { var exisitingIds = GetQueryable() .Where(x => x.UserId == userId && userId != 0 && navIds.Contains(x.NavigationId)) .Select(x => x.NavigationId).ToList(); var nonExisitingIds = navIds.Where(x => !exisitingIds.Contains(x)).ToList(); var roleNavs = new List(); foreach (var item in nonExisitingIds) { var entity = new UserRoleNavigationEntity() { NavigationId = item, UserId = userId }; roleNavs.Add(entity); } var res = AddEntities(roleNavs); return res; } public ResultModel RevokeRole(int roleId, int navId) { if (roleId == 0) return new ResultModel("请指定角色Id"); var res = RemoveEntities(x => x.RoleId == roleId && navId == x.NavigationId); return res; } public ResultModel RevokeRoleNavigations(int roleId, IList navIds) { if (roleId == 0) return new ResultModel() { Success = false, Message = "请提供正确角色Id" }; var res = RemoveEntities(x => x.RoleId == roleId && navIds.Contains(x.NavigationId)); return res; } public ResultModel RevokeUser(int userId, int navId) { if (userId == 0) return new ResultModel("请指定用户Id"); var res = RemoveEntities(x => x.UserId == userId && navId == x.NavigationId); return res; } public ResultModel RevokeUserNavigations(int userId, IList navIds) { if (userId == 0) return new ResultModel() { Success = false, Message = "请提供正确用户Id" }; var res = RemoveEntities(x => x.UserId == userId && navIds.Contains(x.NavigationId)); return res; } public IList SetTree(IList list, string parentMark) { var result = new List(); foreach (var item in list) { if (item.Mark!="0"&&item.ParentMark == parentMark) { result.Add(item); item.Children = SetTree(list, item.Mark); } } result = result.OrderByDescending(x => x.SortOrder).ToList(); return result; } } }