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
{
///
/// 角色权限服务实践
///
public class RoleRightServer : IRoleRightServer
{
///
/// 依赖注入
///
private static readonly SqlSugarScope Db = DataContext.Db;
private readonly UserManager _userManager;
///
/// 构造函数
///
///
public RoleRightServer(UserManager userManager)
{
_userManager = userManager;
}
///
/// 获取用户的菜单权限 ----csc
///
/// 用户Id
///
public async Task> GetRoleMenuList()
{
var modUser = await Db.Queryable().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()
.LeftJoin((a, b) => a.MenuNo == b.MenuNo)
.LeftJoin((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) //.OrderBy((a, b, c) => SqlFunc.ToInt32(a.MenuNo))
.Select()
.ToListAsync();
}
///
/// 根据id获取角色权限信息列表(单表)
///
/// 角色权限id
///
public async Task> GetRoleRightOneListById(int id)
{
return await Db.Queryable().Where(s => s.IsDel == "0" && s.RoleNo == SqlFunc.Subqueryable().Where(c => c.IsDel == "0" && c.Id == id).Select(c => c.RoleNo)).ToListAsync();
}
///
/// 新增角色权限信息
///
/// 菜单号
/// 角色号
///
/// 捕获异常
public async Task InsertRoleRight(string MenuNo, string RoleNo)
{
List listRole = await Db.Queryable().Where(s => s.RoleNo == RoleNo).ToListAsync();
if (listRole.Count > 0)
{
await Db.Deleteable().Where(s => s.RoleNo == RoleNo).ExecuteCommandAsync();
}
var arr = MenuNo.Split(',');
var listRight = new List();
//循环将菜单数组分别加入到数据模型中
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 listRoleDel = await Db.Queryable().Where(s => SqlFunc.Subqueryable().Where(c => c.RoleNo == RoleNo && s.Id == c.Id).Any()).ToListAsync();
var listRoleNo = listRoleDel.Select(s => s.RoleNo).Distinct().ToList();
List listRoleRight = await Db.Queryable().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().Where(s => s.RoleNo == item.RoleNo && s.MenuNo == right.MenuNo).ExecuteCommandAsync();
}
}
}
}
}
}