using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Security.Claims;
|
using System.Text;
|
using System.Threading.Tasks;
|
using AutoMapper;
|
using Model.ModelDto.SysDto;
|
using Model.ModelVm.SysVm;
|
using SqlSugar;
|
using Utility;
|
using WMS.DAL.SystemService;
|
using WMS.Entity.Context;
|
using WMS.Entity.SysEntity;
|
using WMS.IBLL.ISysServer;
|
using WMS.IDAL.ISysInterface;
|
|
namespace WMS.BLL.SysServer
|
{
|
/// <summary>
|
/// 角色权限服务实践
|
/// </summary>
|
public class RoleRightServer : IRoleRightServer
|
{
|
/// <summary>
|
/// 依赖注入
|
/// </summary>
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
private readonly UserManager _userManager;
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
/// <param name="roles"></param>
|
public RoleRightServer(UserManager userManager)
|
{
|
_userManager = userManager;
|
}
|
|
/// <summary>
|
/// 获取用户的菜单权限 ----csc
|
/// </summary>
|
/// <param name="userId">用户Id</param>
|
/// <returns></returns>
|
public async Task<List<RoleRightDto>> GetRoleMenuList()
|
{
|
var modUser = await Db.Queryable<SysUserInfor>().FirstAsync(m => m.Id == _userManager.UserId && m.IsDel == "0");
|
if (modUser == null)
|
{
|
throw Oops.Bah("未查询到登录人信息");
|
}
|
if (string.IsNullOrWhiteSpace(modUser.RoleNo))
|
{
|
throw Oops.Bah("未查询到登录人的所属角色信息");
|
}
|
return await Db.Queryable<SysRoleRight>()
|
.LeftJoin<SysFunctionMenu>((a, b) => a.MenuNo == b.MenuNo)
|
.LeftJoin<SysRoles>((a, b, c) => a.RoleNo == c.RoleNo)
|
.Where((a, b, c) => a.IsDel == "0" && b.IsDel == "0" && c.IsDel == "0")
|
.Where((a, b, c) => a.RoleNo == modUser.RoleNo)
|
.OrderBy((a, b, c) => b.Ord)
|
.Select<RoleRightDto>()
|
.ToListAsync();
|
}
|
|
/// <summary>
|
/// 根据id获取角色权限信息列表(单表)
|
/// </summary>
|
/// <param name="rolerightids">角色权限id</param>
|
/// <returns></returns>
|
public async Task<List<SysRoleRight>> GetRoleRightOneListById(int id)
|
{
|
return await Db.Queryable<SysRoleRight>().Where(s => s.IsDel == "0" && s.RoleNo == SqlFunc.Subqueryable<SysRoles>().Where(c => c.IsDel == "0" && c.Id == id).Select(c => c.RoleNo)).ToListAsync();
|
}
|
|
/// <summary>
|
/// 新增角色权限信息
|
/// </summary>
|
/// <param name="MenuNo">菜单号</param>
|
/// <param name="RoleNo">角色号</param>
|
/// <returns></returns>
|
/// <exception cref="Exception">捕获异常</exception>
|
public async Task InsertRoleRight(string MenuNo, string RoleNo)
|
{
|
List<SysRoleRight> listRole = await Db.Queryable<SysRoleRight>().Where(s => s.RoleNo == RoleNo).ToListAsync();
|
if (listRole.Count > 0)
|
{
|
await Db.Deleteable<SysRoleRight>().Where(s => s.RoleNo == RoleNo).ExecuteCommandAsync();
|
}
|
var arr = MenuNo.Split(',');
|
var listRight = new List<SysRoleRight>();
|
//循环将菜单数组分别加入到数据模型中
|
for (int j = 0; j < arr.Count(); j++)
|
{
|
SysRoleRight roleright = new SysRoleRight();
|
roleright.RoleNo = RoleNo;//角色号
|
roleright.MenuNo = arr[j];//菜单号
|
roleright.CreateUser = _userManager.UserId;//创建人
|
roleright.CreateTime = DateTime.Now;
|
listRight.Add(roleright);
|
}
|
await Db.Insertable(listRight).ExecuteCommandAsync();
|
|
//删除子级角色权限信息。(角色权限减少,角色下级权限同时减少)
|
List<SysRoles> listRoleDel = await Db.Queryable<SysRoles>().Where(s => SqlFunc.Subqueryable<SysUserInfor>().Where(c => c.RoleNo == RoleNo && s.Id == c.Id).Any()).ToListAsync();
|
var listRoleNo = listRoleDel.Select(s => s.RoleNo).Distinct().ToList();
|
List<SysRoleRight> listRoleRight = await Db.Queryable<SysRoleRight>().Where(s => listRoleNo.Contains(s.RoleNo)).ToListAsync();
|
foreach (var item in listRoleDel)
|
{
|
var listChildRoleRight = listRoleRight.Where(s => s.RoleNo == item.RoleNo).ToList();
|
foreach (var right in listChildRoleRight)
|
{
|
int first1 = Array.IndexOf(arr, right.MenuNo);
|
if (first1 <= -1)
|
{
|
await Db.Deleteable<SysRoleRight>().Where(s => s.RoleNo == item.RoleNo && s.MenuNo == right.MenuNo).ExecuteCommandAsync();
|
}
|
}
|
}
|
}
|
|
}
|
}
|