using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.DDD;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Request;
using Hncore.Pass.Manage.Response;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Pass.Manage.Repository;
using Hncore.Infrastructure.EF;
namespace Hncore.Pass.Manage.Service
{
///
/// 管理员业务逻辑类
///
///
public class ManagerPermissionService : BaseService
{
EfDbContext m_DbContext { get; set; }
///
/// 构造函数
///
/// 管理员标签查询对象
public ManagerPermissionService(EfDbContext _DbContext,
IHttpContextAccessor hca) : base(hca)
{
m_DbContext = _DbContext;
}
///
/// 获取管理员权限
///
/// 请求对象
/// 响应列表对象
public async Task> GetByOperator(QueryByIdRequest param,bool showAll)
{
//获取到所拥有的所有权限
// var meCodes = m_DbContext.Set().GetQueryable().Where(c => c.DeleteTag == 0 && c.ManagerId == param.Id).Select(c => c.PermissionCode);
// var search = m_DbContext.Set().GetQueryable().Where(c => c.DeleteTag == 0 && c.Systemid == 100 && meCodes.Contains(c.Permissioncode));
var managerpPrmissions = new List();
var manager = await m_DbContext.Set().FindByIdAsync(param.Id);
var permissions = m_DbContext.Set().GetQueryable()
.Where(c => c.DeleteTag == 0 && c.Systemid == 100)
.OrderBy(m => m.Sortorder)
.ToList();
if (manager.IsRoot)
{
permissions.ForEach(m => {
managerpPrmissions.Add(new ManagerToPermission()
{
AllowAdd = 1,
AllowDel = 1,
AllowEdit = 1,
AllowView = 1,
ManagerId = manager.Id,
PermissionCode = m.Permissioncode,
TenantId = manager.TenantId,
});
});
}
else
{
managerpPrmissions = m_DbContext.Set().GetQueryable().Where(c => c.DeleteTag == 0 && c.ManagerId == param.Id).ToList();
}
List result = CreatePermissionList(permissions, "0", managerpPrmissions, showAll);
return result;
}
///
/// 组装权限列表
///
/// 所有的权限列表
/// 父级权限编码
/// 组装好的列表
private List CreatePermissionList(List all, string parentCode, List mlist, bool showAll=true)
{
var list = all.Where(c => c.Parentcode == parentCode);
if (list == null || list.Count() <= 0)
return null;
List result = new List();
foreach (var item in list)
{
QueryPermissionResponse mdl = ConvertToQueryPermission(item, mlist, showAll);
if (mdl == null) continue;
var child = all.Where(c => c.Parentcode == item.Permissioncode);
if (child != null && child.Count() > 0)
mdl.Children = CreatePermissionList(all, item.Permissioncode, mlist, showAll);
result.Add(mdl);
}
return result;
}
///
/// 实体转换返回数据对象
///
///
///
private QueryPermissionResponse ConvertToQueryPermission(Permission item, List mlist,bool showAll=true)
{
var one = mlist.FirstOrDefault(t => t.PermissionCode == item.Permissioncode);
QueryPermissionResponse mp = new QueryPermissionResponse();
if (one != null)
{
mp.AllowAdd = true;
mp.AllowDel = true;
mp.AllowEdit = true;
mp.AllowView = true;
}
if (one == null && !showAll) return null;
mp.Id = item.Id;
mp.Permissioncode = item.Permissioncode;
mp.Permissionlabel = item.Permissionlabel;
mp.Permissionurl = item.Permissionurl;
mp.Parentcode = item.Parentcode;
mp.DeleteTag = item.DeleteTag;
mp.CreatorId = item.CreatorId;
mp.CreateTime = item.CreateTime;
mp.UpdateTime = item.UpdateTime;
mp.Sortorder = item.Sortorder;
mp.Icon = item.Icon;
mp.Iconactivate = item.Iconactivate;
mp.Systemid = item.Systemid;
mp.isnew = item.isnew;
return mp;
}
}
}