using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Model.ModelDto.SysDto;
using WMS.Entity;
using WMS.Entity.SysEntity;
using WMS.IBLL.ISysServer;
using WMS.IDAL;
using WMS.IDAL.ISysInterface;
using Model.ModelVm.SysVm;
using WMS.Entity.Context;
using Utility;
using Talk.Extensions;
namespace WMS.BLL.SysServer
{
///
/// RBAC服务实践
///
public class RBACServer : IRBACServer
{
///
/// 依赖注入
///
public IRBACRepository _rbac { get; set; }
private readonly IMenuRepository _menu;
private readonly IRoleRightRepository _roleright;
private static readonly SqlSugarScope Db = DataContext.Db;
private readonly UserManager _userManager;
///
/// 构造函数
///
///
///
///
public RBACServer(IRBACRepository rbac, IMenuRepository menu, IRoleRightRepository roleright, UserManager userManager)
{
_rbac = rbac;
_menu = menu;
_roleright = roleright;
_userManager = userManager;
}
///
/// 获取rbac信息列表
///
///
public async Task> GetRBACLists(int roleid)
{
List rbaclist = await _rbac.GetRBACLists(roleid);
return rbaclist;
}
///
/// 根据角色id获取对应菜单权限
///
///
///
public async Task> GetRoleRightList(int id)
{
return await Db.Queryable()
.LeftJoin((a, b) => a.RoleNo == b.RoleNo)
.LeftJoin((a, b, c) => a.MenuNo == c.MenuNo)
.Where((a, b, c) => a.Id == id && a.IsDel == "0")
.OrderBy((a, b, c) => SqlFunc.ToInt32(a.MenuNo)).OrderBy((a, b, c) => c.Ord)
.Select()
.ToListAsync();
}
///
/// 根据角色Id获取对应的菜单选中
///
///
///
public async Task> GetMenuByroleIdNew(int id)
{
List rolerightlist = await Db.Queryable().LeftJoin((a, b) => a.RoleNo == b.RoleNo)
.LeftJoin((a, b, c) => a.MenuNo == c.MenuNo)
.Where((a, b, c) => a.Id == id && a.IsDel == "0")
.Select()
.ToListAsync();
var listMenuNo = rolerightlist.Select(s => s.MenuNo).Distinct().ToList();
List listMenu = await Db.Queryable().OrderBy(m => m.MenuNo).Select(m => new FunctionMenuDto()
{
//Id = m.Id,
MenuNo = m.MenuNo,
ParentId = m.ParentNo,
title = m.MenuName,
Expand = listMenuNo.Contains(m.MenuNo),
@checked = listMenuNo.Contains(m.MenuNo)
}).ToListAsync();
var listParent = listMenu.Where(s => s.ParentId == "").ToList();
var listChild = listMenu.Where(s => s.ParentId != "").ToList();
foreach (var item in listParent)
{
FunNew(listChild, item);
}
return listParent;
}
public void FunNew(List all, FunctionMenuDto curItem)
{
List childItems = all.Where(m => m.ParentId == curItem.MenuNo).ToList(); //得到子节点
curItem.children = childItems; //将子节点加入
//遍历子节点,进行递归,寻找子节点的子节点
foreach (var subItem in childItems)
{
FunNew(all, subItem);
}
}
///
/// 分配权限显示
///
///
///
///
public async Task> GetRoleRightRBAC(string MenuNo, string UserId)
{
var modUser = await Db.Queryable().FirstAsync(s => s.Id == _userManager.UserId);
return await Db.Queryable()
.Where(s => s.IsDel == "0")
.WhereIF(!string.IsNullOrEmpty(MenuNo), s => s.ParentNo == MenuNo)
.WhereIF(modUser.UserName.ToUpper() != "ADMIN", s => SqlFunc.Subqueryable().Where(c => c.RoleNo == modUser.RoleNo && s.MenuNo == c.MenuNo).Any())
.OrderBy(s => s.Ord, OrderByType.Asc)
.Select()
.ToListAsync();
}
}
}