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
|
{
|
/// <summary>
|
/// RBAC服务实践
|
/// </summary>
|
public class RBACServer : IRBACServer
|
{
|
/// <summary>
|
/// 依赖注入
|
/// </summary>
|
public IRBACRepository _rbac { get; set; }
|
private readonly IMenuRepository _menu;
|
private readonly IRoleRightRepository _roleright;
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
private readonly UserManager _userManager;
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
/// <param name="rbac"></param>
|
/// <param name="menu"></param>
|
/// <param name="roleright"></param>
|
public RBACServer(IRBACRepository rbac, IMenuRepository menu, IRoleRightRepository roleright, UserManager userManager)
|
{
|
_rbac = rbac;
|
_menu = menu;
|
_roleright = roleright;
|
_userManager = userManager;
|
}
|
|
/// <summary>
|
/// 获取rbac信息列表
|
/// </summary>
|
/// <returns></returns>
|
public async Task<List<RBAC>> GetRBACLists(int roleid)
|
{
|
List<RBAC> rbaclist = await _rbac.GetRBACLists(roleid);
|
return rbaclist;
|
}
|
|
/// <summary>
|
/// 根据角色id获取对应菜单权限
|
/// </summary>
|
/// <param name="id"></param>
|
/// <returns></returns>
|
public async Task<List<RoleRightDto>> GetRoleRightList(int id)
|
{
|
return await Db.Queryable<SysRoleRight>()
|
.LeftJoin<SysRoles>((a, b) => a.RoleNo == b.RoleNo)
|
.LeftJoin<SysFunctionMenu>((a, b, c) => a.MenuNo == c.MenuNo)
|
.Where((a, b, c) => a.Id == id && a.IsDel == "0")
|
.Select<RoleRightDto>()
|
.ToListAsync();
|
}
|
|
/// <summary>
|
/// 根据角色Id获取对应的菜单选中
|
/// </summary>
|
/// <param name="id"></param>
|
/// <returns></returns>
|
public async Task<List<FunctionMenuDto>> GetMenuByroleIdNew(int id)
|
{
|
List<RoleRightDto> rolerightlist = await Db.Queryable<SysRoleRight>().LeftJoin<SysRoles>((a, b) => a.RoleNo == b.RoleNo)
|
.LeftJoin<SysFunctionMenu>((a, b, c) => a.MenuNo == c.MenuNo)
|
.Where((a, b, c) => a.Id == id && a.IsDel == "0")
|
.Select<RoleRightDto>()
|
.ToListAsync();
|
var listMenuNo = rolerightlist.Select(s => s.MenuNo).Distinct().ToList();
|
List<FunctionMenuDto> listMenu = await Db.Queryable<SysFunctionMenu>().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<FunctionMenuDto> all, FunctionMenuDto curItem)
|
{
|
List<FunctionMenuDto> childItems = all.Where(m => m.ParentId == curItem.MenuNo).ToList(); //得到子节点
|
curItem.children = childItems; //将子节点加入
|
|
//遍历子节点,进行递归,寻找子节点的子节点
|
foreach (var subItem in childItems)
|
{
|
FunNew(all, subItem);
|
}
|
}
|
|
|
|
/// <summary>
|
/// 分配权限显示
|
/// </summary>
|
/// <param name="MenuNo"></param>
|
/// <param name="UserId"></param>
|
/// <returns></returns>
|
public async Task<List<FunctionMenuDto>> GetRoleRightRBAC(string MenuNo, string UserId)
|
{
|
var modUser = await Db.Queryable<SysUserInfor>().FirstAsync(s => s.Id == _userManager.UserId);
|
return await Db.Queryable<SysFunctionMenu>()
|
.Where(s => s.IsDel == "0")
|
.WhereIF(!string.IsNullOrEmpty(MenuNo), s => s.ParentNo == MenuNo)
|
.WhereIF(modUser.UserName.ToUpper() != "ADMIN", s => SqlFunc.Subqueryable<SysRoleRight>().Where(c => c.RoleNo == modUser.RoleNo && s.MenuNo == c.MenuNo).Any())
|
.OrderBy(s => s.Ord, OrderByType.Asc)
|
.Select<FunctionMenuDto>()
|
.ToListAsync();
|
}
|
}
|
}
|